GithubHelp home page GithubHelp logo

gradle / bt-dev-prod-data-collector Goto Github PK

View Code? Open in Web Editor NEW
7.0 7.0 5.0 1.44 MB

Data collector for Gradle Build Tool Developer productivity metrics

License: Apache License 2.0

Kotlin 93.03% Java 6.83% Procfile 0.14%
gradle-bt gradle-bt-build-infrastructure

bt-dev-prod-data-collector's Introduction

Gradle

Revved up by Develocity CII Best Practices

Gradle is a build tool with a focus on build automation and support for multi-language development. If you are building, testing, publishing, and deploying software on any platform, Gradle offers a flexible model that can support the entire development lifecycle from compiling and packaging code to publishing websites. Gradle has been designed to support build automation across multiple languages and platforms, including Java, Scala, Android, Kotlin, C/C++, and Groovy, and is closely integrated with development tools and continuous integration servers, including Eclipse, IntelliJ, and Jenkins.

For more information, please visit the official project homepage

Getting Started

Stay in Flow

Enjoy first-class Gradle support in your IDE of choice.

Need Help?

Contributing

If you're looking to contribute to Gradle or provide a patch/pull request, you can find more info here.

This project adheres to the Gradle Code of Conduct. By participating, you are expected to uphold this code.

bt-dev-prod-data-collector's People

Contributors

blindpirate avatar davidmc24 avatar erichaagdev avatar hegyibalint avatar jthurne avatar julioz avatar wolfs avatar zielezin avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

bt-dev-prod-data-collector's Issues

Frequent OOM

We have seen a lot of OOM issues. According to the heap dump, there seems to be a few default buffers created in Netty:

image

They are 4x8=32MB, which seems pretty large for our application.

Intermittent 5XX TeamCity response could cause data missing

Currently, we load TeamCity builds into database in the following way:

  1. Find the latest build in DB as the start point for next query.
  2. Query TeamCity REST API with https://builds.gradle.org/app/rest/builds/?locator=affectedProject:(id:Enterprise_Main),branch:default:any,sinceDate:20231209T073839%2B0000 with pagination. However, there is no retry: any 5XX response may break the loop.

The problem is, the result return by TeamCity API is not ordered - for example, if the first page contains yesterday's data and the second page call throws 5XX exception, next time the query will start with yesterday's date and skip all unloaded data before yesterday.

We should fix both problems:

  • Add retry for the TeamCity API calls.
  • Only update the "query start point" after current data loading finishes successfully.

Get rid of heroku

Today people report that data was missing. heroku logs show OOM, then, it was a nightmare to troubleshoot this issues.

I spent hours trying to get a dump from heroku app. I keep getting error:

$ heroku java:jmap --hprof
Establishing credentials... done
Generating heap dump for web.1 on ⬢ btdevprod-exporter...
 ▸    There was an error connecting to the dyno!

$ heroku ps:exec --dyno=web.1 -a btdevprod-exporter
Establishing credentials... done
Connecting to web.1 on ⬢ btdevprod-exporter...
 ▸    There was an error connecting to the dyno!
 ▸    There was an error connecting to the dyno!

What's the "error"? I don't know. I tried a million times. Maybe that's my network issue? Let's try to run heroku CLI on CI agent? Unfortunately you can't because personal API token is disabled - you have to login via SSO. heroku CLI can't authenticate on CI agents.

After hours effort, I gave up. Just increasing the Xmx and it worked.

During the troubleshooting, I also got errors like too many connections for role at startup running flyway migration. Again, it waste hours of time trying to kill connections because we don't have superuser persmission. I can only see a lot of connections with SELECT * FROM pg_stat_activity; but I can't kill them.

Great! heroku has pg:ps command to help us find out connections.

$ heroku pg:ps
 pid | state | source | username | running_for | transaction_start | waiting | query
-----+-------+--------+----------+-------------+-------------------+---------+-------
(0 rows)

But it shows zero connection even though the app complains too many connections at startup. I ended up disabling flyway migration to start the app.

I don't want to waste my time on heroku. Let's get rid of it and migrate it to a fully managed server. Playing with heroku makes me feel like dancing with all my hands & feet tied.

`master` is broken after upgrading spring boot plugin 3.1.0

Importing into IDEA or running ./gradlew assemble now complain:

> Task :buildSrc:generateExternalPluginSpecBuilders FAILED

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':buildSrc:generateExternalPluginSpecBuilders'.
> Could not resolve all files for configuration ':buildSrc:compileClasspath'.
   > Could not resolve org.springframework.boot:spring-boot-gradle-plugin:3.1.0.
     Required by:
         project :buildSrc
      > No matching variant of org.springframework.boot:spring-boot-gradle-plugin:3.1.0 was found. The consumer was configured to find a library for use during compile-time, compatible with Java 11, preferably not packaged as a jar, preferably optimized for standard JVMs, and its dependencies declared externally, as well as attribute 'org.gradle.plugin.api-version' with value '8.1.1', attribute 'org.jetbrains.kotlin.platform.type' with value 'jvm' but:
          - Variant 'apiElements' capability org.springframework.boot:spring-boot-gradle-plugin:3.1.0 declares a library for use during compile-time, packaged as a jar, and its dependencies declared externally:
              - Incompatible because this component declares a component, compatible with Java 17 and the consumer needed a component, compatible with Java 11
              - Other compatible attributes:
                  - Doesn't say anything about its target Java environment (preferred optimized for standard JVMs)
                  - Doesn't say anything about org.gradle.plugin.api-version (required '8.1.1')
                  - Doesn't say anything about org.jetbrains.kotlin.platform.type (required 'jvm')

It's probably because I re-installed my IDEA yesterday.

Cleanup job has been failing for a long time

This job has been failing:

ERROR: update or delete on table "build" violates foreign key constraint "flaky_test_class_build_id_fkey" on table "flaky_test_class"
  Detail: Key (build_id)=(wuddzvnv4njz4) is still referenced from table "flaky_test_class".
	at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2713) ~[postgresql-42.6.0.jar:42.6.0]
	at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:2401) ~[postgresql-42.6.0.jar:42.6.0]
	at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:368) ~[postgresql-42.6.0.jar:42.6.0]
	at org.postgresql.jdbc.PgStatement.executeInternal(PgStatement.java:498) ~[postgresql-42.6.0.jar:42.6.0]
	at org.postgresql.jdbc.PgStatement.execute(PgStatement.java:415) ~[postgresql-42.6.0.jar:42.6.0]
	at org.postgresql.jdbc.PgPreparedStatement.executeWithFlags(PgPreparedStatement.java:190) ~[postgresql-42.6.0.jar:42.6.0]
	at org.postgresql.jdbc.PgPreparedStatement.execute(PgPreparedStatement.java:177) ~[postgresql-42.6.0.jar:42.6.0]
	at com.zaxxer.hikari.pool.ProxyPreparedStatement.execute(ProxyPreparedStatement.java:44) ~[HikariCP-5.0.1.jar:na]
	at com.zaxxer.hikari.pool.HikariProxyPreparedStatement.execute(HikariProxyPreparedStatement.java) ~[HikariCP-5.0.1.jar:na]
	at org.jooq.tools.jdbc.DefaultPreparedStatement.execute(DefaultPreparedStatement.java:219) ~[jooq-3.18.4.jar:na]
	at org.jooq.impl.AbstractQuery.execute(AbstractQuery.java:436) ~[jooq-3.18.4.jar:na]
	at org.jooq.impl.AbstractDMLQuery.execute(AbstractDMLQuery.java:1024) ~[jooq-3.18.4.jar:na]
	at org.jooq.impl.AbstractQuery.execute(AbstractQuery.java:357) ~[jooq-3.18.4.jar:na]
	... 15 common frames omitted

Don't fetch running builds

The current implementation fetches ALL builds, including the running builds and stores them to DB. This causes some problems:

  1. NPE like this:
java.lang.NullPointerException: null
  at org.gradle.devprod.collector.teamcity.JooqRepository.latestFinishedBuildTimestamp(JooqRepository.kt:80) ~[teamcity-export-0.0.1-SNAPSHOT.jar!/:na]
  at org.gradle.devprod.collector.teamcity.TeamcityExport.getSinceFor(TeamcityExport.kt:23) ~[teamcity-export-0.0.1-SNAPSHOT.jar!/:na]
  at org.gradle.devprod.collector.teamcity.TeamcityExport.loadAllGeBuilds(TeamcityExport.kt:46) ~[teamcity-export-0.0.1-SNAPSHOT.jar!/:na]
  at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
  at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[na:na]
  at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
  at java.base/java.lang.reflect.Method.invoke(Method.java:568) ~[na:na]
  at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:343) ~[spring-aop-6.0.9.jar!/:6.0.9]
  1. The running builds are never updated.

However, this is not as simple as "excluding running builds", because current implementation doesn't take them into consideration at all - if they're not fetched each time, they'll never be fetched again.

bt-dev-prod-data-collector cannot fetch GE builds

2023-09-01T06:47:06.335384+00:00 app[web.1]: Loading all GE builds from Teamcity
2023-09-01T06:47:11.788385+00:00 app[web.1]: 2023-09-01T06:47:11.782Z ERROR 2 --- [        task-78] .a.i.SimpleAsyncUncaughtExceptionHandler : Unexpected exception occurred invoking async method: public void org.gradle.devprod.collector.teamcity.TeamcityExport.loadGeFailedBuilds()
2023-09-01T06:47:11.788405+00:00 app[web.1]:
2023-09-01T06:47:11.788406+00:00 app[web.1]: org.jetbrains.teamcity.rest.TeamCityConversationException: Failed to connect to https://builds.gradle.org/guestAuth/app/rest/builds/id:71134094: 403 Forbidden Responding with error, status code: 403 (Forbidden).
2023-09-01T06:47:11.788408+00:00 app[web.1]: Details: jetbrains.buildServer.serverSide.auth.AccessDeniedException: Not enough permissions to access build with id: 71134094
2023-09-01T06:47:11.788417+00:00 app[web.1]: Access denied. Check the user has enough permissions to perform the operation.
2023-09-01T06:47:11.788418+00:00 app[web.1]: at org.jetbrains.teamcity.rest.TeamCityInstanceImpl$service$3.handleError(implementation.kt:156) ~[teamcity-rest-client-1.18.0.jar!/:na]
2023-09-01T06:47:11.788418+00:00 app[web.1]: at org.jetbrains.teamcity.rest.TeamCityInstanceImpl$service$3.handleError(implementation.kt:105) ~[teamcity-rest-client-1.18.0.jar!/:na]
2023-09-01T06:47:11.788419+00:00 app[web.1]: at retrofit.RestAdapter$RestHandler.invoke(RestAdapter.java:242) ~[retrofit-1.9.0.jar!/:na]
2023-09-01T06:47:11.788419+00:00 app[web.1]: at jdk.proxy2/jdk.proxy2.$Proxy96.build(Unknown Source) ~[na:na]
2023-09-01T06:47:11.788419+00:00 app[web.1]: at org.jetbrains.teamcity.rest.BuildImpl.fetchFullBean(implementation.kt:1255) ~[teamcity-rest-client-1.18.0.jar!/:na]
2023-09-01T06:47:11.788419+00:00 app[web.1]: at org.jetbrains.teamcity.rest.BuildImpl.fetchFullBean(implementation.kt:1251) ~[teamcity-rest-client-1.18.0.jar!/:na]
2023-09-01T06:47:11.788420+00:00 app[web.1]: at org.jetbrains.teamcity.rest.BaseImpl$fullBean$2.invoke(implementation.kt:650) ~[teamcity-rest-client-1.18.0.jar!/:na]
2023-09-01T06:47:11.788420+00:00 app[web.1]: at org.jetbrains.teamcity.rest.BaseImpl$fullBean$2.invoke(implementation.kt:629) ~[teamcity-rest-client-1.18.0.jar!/:na]
2023-09-01T06:47:11.788420+00:00 app[web.1]: at kotlin.SynchronizedLazyImpl.getValue(LazyJVM.kt:74) ~[kotlin-stdlib-1.8.21.jar!/:1.8.21-release-380(1.8.21)]
2023-09-01T06:47:11.788421+00:00 app[web.1]: at org.jetbrains.teamcity.rest.BaseImpl.getFullBean(implementation.kt) ~[teamcity-rest-client-1.18.0.jar!/:na]
2023-09-01T06:47:11.788422+00:00 app[web.1]: at org.jetbrains.teamcity.rest.BuildImpl.getSnapshotDependencies(implementation.kt:1337) ~[teamcity-rest-client-1.18.0.jar!/:na]
2023-09-01T06:47:11.788423+00:00 app[web.1]: at org.gradle.devprod.collector.teamcity.TeamcityClientService.getDependencyBuilds(TeamcityClientService.kt:33) ~[teamcity-export-0.0.1-SNAPSHOT.jar!/:na]
2023-09-01T06:47:11.788423+00:00 app[web.1]: at org.gradle.devprod.collector.teamcity.TeamcityClientService.storeBuild(TeamcityClientService.kt:53) ~[teamcity-export-0.0.1-SNAPSHOT.jar!/:na]
2023-09-01T06:47:11.788423+00:00 app[web.1]: at org.gradle.devprod.collector.teamcity.TeamcityClientService.loadAndStoreAllBuilds(TeamcityClientService.kt:68) ~[teamcity-export-0.0.1-SNAPSHOT.jar!/:na]
2023-09-01T06:47:11.788423+00:00 app[web.1]: at org.gradle.devprod.collector.teamcity.TeamcityExport.loadGeFailedBuilds(TeamcityExport.kt:38) ~[teamcity-export-0.0.1-SNAPSHOT.jar!/:na]
2023-09-01T06:47:11.788423+00:00 app[web.1]: at jdk.internal.reflect.GeneratedMethodAccessor59.invoke(Unknown Source) ~[na:na]
2023-09-01T06:47:11.788423+00:00 app[web.1]: at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
2023-09-01T06:47:11.788424+00:00 app[web.1]: at java.base/java.lang.reflect.Method.invoke(Method.java:568) ~[na:na]
2023-09-01T06:47:11.788424+00:00 app[web.1]: at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:343) ~[spring-aop-6.0.9.jar!/:6.0.9]
2023-09-01T06:47:11.788424+00:00 app[web.1]: at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:196) ~[spring-aop-6.0.9.jar!/:6.0.9]
2023-09-01T06:47:11.788424+00:00 app[web.1]: at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) ~[spring-aop-6.0.9.jar!/:6.0.9]
2023-09-01T06:47:11.788424+00:00 app[web.1]: at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750) ~[spring-aop-6.0.9.jar!/:6.0.9]
2023-09-01T06:47:11.788424+00:00 app[web.1]: at org.springframework.aop.interceptor.AsyncExecutionInterceptor.lambda$invoke$0(AsyncExecutionInterceptor.java:115) ~[spring-aop-6.0.9.jar!/:6.0.9]
2023-09-01T06:47:11.788425+00:00 app[web.1]: at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) ~[na:na]
2023-09-01T06:47:11.788425+00:00 app[web.1]: at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) ~[na:na]
2023-09-01T06:47:11.788425+00:00 app[web.1]: at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) ~[na:na]
2023-09-01T06:47:11.788425+00:00 app[web.1]: at java.base/java.lang.Thread.run(Thread.java:833) ~[na:na]
2023-09-01T06:47:11.788425+00:00 app[web.1]: Caused by: retrofit.RetrofitError: 403 Forbidden
2023-09-01T06:47:11.788426+00:00 app[web.1]: at retrofit.RetrofitError.httpError(RetrofitError.java:40) ~[retrofit-1.9.0.jar!/:na]
2023-09-01T06:47:11.788426+00:00 app[web.1]: at retrofit.RestAdapter$RestHandler.invokeRequest(RestAdapter.java:388) ~[retrofit-1.9.0.jar!/:na]
2023-09-01T06:47:11.788431+00:00 app[web.1]: at retrofit.RestAdapter$RestHandler.invoke(RestAdapter.java:240) ~[retrofit-1.9.0.jar!/:na]
2023-09-01T06:47:11.788432+00:00 app[web.1]: ... 24 common frames omitted
2023-09-01T06:47:11.788432+00:00 app[web.1]:

Timeout when accessing TeamCity API

Unexpected exception occurred invoking async method: public void org.gradle.devprod.collector.teamcity.TeamcityExport.loadGbtTriggerBuilds()

 org.jetbrains.teamcity.rest.TeamCityConversationException: Failed to connect to https://builds.gradle.org/guestAuth/app/rest/builds/id:61484873: interrupted
 at org.jetbrains.teamcity.rest.TeamCityInstanceImpl$service$3.handleError(implementation.kt:156) ~[teamcity-rest-client-1.14.0.jar!/:na]
 at org.jetbrains.teamcity.rest.TeamCityInstanceImpl$service$3.handleError(implementation.kt:105) ~[teamcity-rest-client-1.14.0.jar!/:na]
 at retrofit.RestAdapter$RestHandler.invoke(RestAdapter.java:242) ~[retrofit-1.9.0.jar!/:na]
 at com.sun.proxy.$Proxy94.build(Unknown Source) ~[na:na]
 at org.jetbrains.teamcity.rest.BuildImpl.fetchFullBean(implementation.kt:1204) ~[teamcity-rest-client-1.14.0.jar!/:na]
 at org.jetbrains.teamcity.rest.BuildImpl.fetchFullBean(implementation.kt:1200) ~[teamcity-rest-client-1.14.0.jar!/:na]
 at org.jetbrains.teamcity.rest.BaseImpl$fullBean$2.invoke(implementation.kt:650) ~[teamcity-rest-client-1.14.0.jar!/:na]
 at org.jetbrains.teamcity.rest.BaseImpl$fullBean$2.invoke(implementation.kt:629) ~[teamcity-rest-client-1.14.0.jar!/:na]
 at kotlin.SynchronizedLazyImpl.getValue(LazyJVM.kt:74) ~[kotlin-stdlib-1.5.32.jar!/:1.5.32-release-578(1.5.32)]
 at org.jetbrains.teamcity.rest.BaseImpl.getFullBean(implementation.kt) ~[teamcity-rest-client-1.14.0.jar!/:na]
 at org.jetbrains.teamcity.rest.BuildImpl.getRevisions(implementation.kt:1310) ~[teamcity-rest-client-1.14.0.jar!/:na]
 at org.gradle.devprod.collector.teamcity.TeamCityBuildKt.toTeamCityBuild(TeamCityBuild.kt:28) ~[teamcity-export-0.0.1-SNAPSHOT.jar!/:na]
 at org.gradle.devprod.collector.teamcity.TeamcityClientService$loadTriggerBuilds$2$1.invoke(TeamcityClientService.kt:39) ~[teamcity-export-0.0.1-SNAPSHOT.jar!/:na]
 at org.gradle.devprod.collector.teamcity.TeamcityClientService$loadTriggerBuilds$2$1.invoke(TeamcityClientService.kt:19) ~[teamcity-export-0.0.1-SNAPSHOT.jar!/:na]
 at kotlin.sequences.TransformingSequence$iterator$1.next(Sequences.kt:210) ~[kotlin-stdlib-1.5.32.jar!/:1.5.32-release-578(1.5.32)]
 at kotlin.sequences.FilteringSequence$iterator$1.calcNext(Sequences.kt:170) ~[kotlin-stdlib-1.5.32.jar!/:1.5.32-release-578(1.5.32)]
 at kotlin.sequences.FilteringSequence$iterator$1.hasNext(Sequences.kt:194) ~[kotlin-stdlib-1.5.32.jar!/:1.5.32-release-578(1.5.32)]
 at kotlin.sequences.FlatteningSequence$iterator$1.ensureItemIterator(Sequences.kt:307) ~[kotlin-stdlib-1.5.32.jar!/:1.5.32-release-578(1.5.32)]
 at kotlin.sequences.FlatteningSequence$iterator$1.hasNext(Sequences.kt:303) ~[kotlin-stdlib-1.5.32.jar!/:1.5.32-release-578(1.5.32)]
 at org.gradle.devprod.collector.teamcity.TeamcityExport.loadGbtTriggerBuilds(TeamcityExport.kt:62) ~[teamcity-export-0.0.1-SNAPSHOT.jar!/:na]
 at org.gradle.devprod.collector.teamcity.TeamcityExport$$FastClassBySpringCGLIB$$4dccbea2.invoke(<generated>) ~[teamcity-export-0.0.1-SNAPSHOT.jar!/:na]
 at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) ~[spring-core-5.3.18.jar!/:5.3.18]
 at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:783) ~[spring-aop-5.3.18.jar!/:5.3.18]
 at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) ~[spring-aop-5.3.18.jar!/:5.3.18]
 at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:753) ~[spring-aop-5.3.18.jar!/:5.3.18]
 at org.springframework.aop.interceptor.AsyncExecutionInterceptor.lambda$invoke$0(AsyncExecutionInterceptor.java:115) ~[spring-aop-5.3.18.jar!/:5.3.18]
 at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) ~[na:na]
 at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) ~[na:na]
 at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) ~[na:na]
 at java.base/java.lang.Thread.run(Thread.java:829) ~[na:na]
 Caused by: retrofit.RetrofitError: interrupted
 at retrofit.RetrofitError.networkError(RetrofitError.java:27) ~[retrofit-1.9.0.jar!/:na]
 at retrofit.RestAdapter$RestHandler.invokeRequest(RestAdapter.java:395) ~[retrofit-1.9.0.jar!/:na]
 at retrofit.RestAdapter$RestHandler.invoke(RestAdapter.java:240) ~[retrofit-1.9.0.jar!/:na]
 ... 27 common frames omitted
 Caused by: java.io.InterruptedIOException: interrupted
 at okio.Timeout.throwIfReached(Timeout.kt:98) ~[okio-jvm-2.8.0.jar!/:na]
 at okio.InputStreamSource.read(JvmOkio.kt:87) ~[okio-jvm-2.8.0.jar!/:na]
 at okio.AsyncTimeout$source$1.read(AsyncTimeout.kt:129) ~[okio-jvm-2.8.0.jar!/:na]
 at okio.RealBufferedSource.request(RealBufferedSource.kt:206) ~[okio-jvm-2.8.0.jar!/:na]
 at okio.RealBufferedSource.require(RealBufferedSource.kt:199) ~[okio-jvm-2.8.0.jar!/:na]
 at okio.RealBufferedSource.readHexadecimalUnsignedLong(RealBufferedSource.kt:381) ~[okio-jvm-2.8.0.jar!/:na]
 at okhttp3.internal.http1.Http1ExchangeCodec$ChunkedSource.readChunkSize(Http1ExchangeCodec.kt:429) ~[okhttp-4.9.3.jar!/:na]
 at okhttp3.internal.http1.Http1ExchangeCodec$ChunkedSource.read(Http1ExchangeCodec.kt:408) ~[okhttp-4.9.3.jar!/:na]
 at okhttp3.internal.connection.Exchange$ResponseBodySource.read(Exchange.kt:276) ~[okhttp-4.9.3.jar!/:na]
 at okio.RealBufferedSource.read(RealBufferedSource.kt:189) ~[okio-jvm-2.8.0.jar!/:na]
 at okio.RealBufferedSource.exhausted(RealBufferedSource.kt:197) ~[okio-jvm-2.8.0.jar!/:na]
 at okio.GzipSource.read(GzipSource.kt:88) ~[okio-jvm-2.8.0.jar!/:na]
 at okio.RealBufferedSource$inputStream$1.read(RealBufferedSource.kt:158) ~[okio-jvm-2.8.0.jar!/:na]
 at retrofit.ExceptionCatchingTypedInput$ExceptionCatchingInputStream.read(ExceptionCatchingTypedInput.java:64) ~[retrofit-1.9.0.jar!/:na]
 at java.base/sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:284) ~[na:na]
 at java.base/sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:326) ~[na:na]
 at java.base/sun.nio.cs.StreamDecoder.read(StreamDecoder.java:178) ~[na:na]
 at java.base/java.io.InputStreamReader.read(InputStreamReader.java:181) ~[na:na]
 at com.google.gson.stream.JsonReader.fillBuffer(JsonReader.java:1290) ~[gson-2.9.0.jar!/:na]
 at com.google.gson.stream.JsonReader.nextNonWhitespace(JsonReader.java:1328) ~[gson-2.9.0.jar!/:na]
 at com.google.gson.stream.JsonReader.doPeek(JsonReader.java:538) ~[gson-2.9.0.jar!/:na]
 at com.google.gson.stream.JsonReader.peek(JsonReader.java:425) ~[gson-2.9.0.jar!/:na]
 at com.google.gson.Gson.assertFullConsumption(Gson.java:963) ~[gson-2.9.0.jar!/:na]
 at com.google.gson.Gson.fromJson(Gson.java:957) ~[gson-2.9.0.jar!/:na]
 at retrofit.converter.GsonConverter.fromBody(GsonConverter.java:63) ~[retrofit-1.9.0.jar!/:na]
 at retrofit.RestAdapter$RestHandler.invokeRequest(RestAdapter.java:367) ~[retrofit-1.9.0.jar!/:na]
 ... 28 common frames omitted

`Exceeded limit on max bytes to buffer` error when invoking export API

Caused by: org.springframework.core.io.buffer.DataBufferLimitException: Exceeded limit on max bytes to buffer : 524288
at org.springframework.core.io.buffer.LimitedDataBufferList.raiseLimitException(LimitedDataBufferList.java:99)
Suppressed: The stacktrace has been enhanced by Reactor, refer to additional information below:
Error has been observed at the following site(s):
 *__checkpoint ⇢ Body from GET https://ge.gradle.org/build-export/v2/build/ealhxkl3qmjks/events?eventTypes=BuildStarted,BuildFinished,BuildCacheRemoteLoadFinished,BuildCacheRemoteStoreFinished,TestStarted,TestFinished,TaskStarted,UserTag,UserNamedValue,ProjectStructure,BuildAgent,DaemonState,DaemonUnhealthy,TaskFinished [DefaultClientResponse]

Database filling up alert from Heroku

We got an got an email from Heroku about the btdevprod-exporter app reaching >7M rows in the database.

There's a 10M row limit. When exceeded, Heroku will prevent any new inserts until the number of rows is reduced

@blindpirate looked into the row count statistics of the database and concluded long_test to be the problem.
image

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.