Daniel
2026-05-12 20:18:35

hello, I am trying to sync in CDC a collection in Mongo and I have selected the option to full sync and then CDC UPSERT. But what I find a bit strange is that i have multiple records in iceberg with the same identifier.

SELECT _id, count(**)
FROM "my_lab_table"
GROUP BY _id
HAVING count(**) >= 2

πŸ‘€ Merlyn
Daniel
2026-05-12 20:26:35

also the delete was not performed correctly (in the source the _id was deleted from the collection), while in Iceberg i have 2 entries (one with the real data and another one with all fields to null which corresponds to when the data was deleted). the _id is the primary key in mongo

πŸ‘€ Vaibhav Verma
36 replies
Vaibhav Verma
2026-05-13 06:25:56

Hi @Daniel, to help us debug this, could you please share:

  1. The streams.json file being used for this job.

  2. The output of db.getCollection("mylabtable").getIndexes() from your Mongo shell.

Vaibhav Verma
2026-05-16 09:35:25

Hi @Daniel, we have released olake version 0.7.3 in which this issue has been fixed. You will have to create a new job to check this.
Please try this version and let us know if you encounter any further issues.

Daniel
2026-05-18 08:01:27

oh so you managed to fix without having to share the streams.json ?

Daniel
2026-05-18 08:01:36

can you tell me if this was only related to mongo?

Daniel
2026-05-18 08:02:09

or also other databases like postgresql and the kafka streams?

Daniel
2026-05-18 08:10:30

found the description here: https://github.com/datazip-inc/olake/pull/951

πŸ‘ Vaibhav Verma
Daniel
2026-05-18 08:11:30

how can i download my streams.json and recreate a new job? I will have to delete all tables from the lakehouse and full-resync+cdc everything.

Vaibhav Verma
2026-05-18 08:11:58

@Daniel, the problem was related to primary key discovery in MongoDB. Earlier, the logic detected all indexed fields and treated them as primary keys.
olakeid is generated by concatenating and hashing all the primary keys in a stream. If any field changes, the olakeidchanges, which is why deduplication didn’t work.
You can also check the PR: https://github.com/datazip-inc/olake/pull/951

Daniel
2026-05-18 08:12:00

btw the streams.json takes a few minutes to show up πŸ™‚

Daniel
2026-05-18 08:13:26

but indexed fields are not primary keys πŸ™‚ so you didn't include the _id if i understand properly?

Vaibhav Verma
2026-05-18 08:14:31

yeah indexed fields are not primary keys so we have pinned _id as the only primary key as its a mandatory field in every mongo collection (starting from mongo version 3.2+)

Daniel
2026-05-18 08:15:45

also how is a delete treated now? does it delete correctly from iceberg (keeping it in time travel) or will i have a row with every value at null that i will need to filter out?

Vaibhav Verma
2026-05-18 08:19:09

you will get the op type as d, which can be used to filter out

Daniel
2026-05-18 08:31:56

but i don't want to filter out, i want it to be deleted in iceberg as well

Daniel
2026-05-18 08:32:34

if you have a record A in mongo, which is deleted, the streams from Mongo captures the deletion. Therefore i expect olake to delete the record from iceberg table as well.

Ankit Sharma
2026-05-18 08:33:58

@Daniel the record will also be deleted from main table, but as it is soft delete so a row also appears with op type d.

Daniel
2026-05-18 08:38:24

i see thank you!

πŸ‘ Ankit Sharma
Daniel
2026-05-27 21:12:38

Hello, just tested and record is still there when delete

Daniel
2026-05-27 21:12:53

2 duplicates _id

Daniel
2026-05-27 21:14:41

the olakeid seems to be well generated but the delete was not performed properly

πŸ‘€ Merlyn, Ankit Sharma
shubham
2026-05-28 05:00:56

@VIKASH CHOUDHARY

VIKASH CHOUDHARY
2026-05-28 05:17:02

hi @Daniel,
Have you created a new job with the new version? Also, could you please share the stream configuration and confirm whether you are running in upsert mode or append-only mode?
Please also share a screenshot of the stream configuration from the Edit Stream page.

VIKASH CHOUDHARY
2026-05-28 05:43:10

Also, are you using partitioning in iceberg table?

Daniel
2026-05-28 07:28:30

yes I have create a new job

Daniel
2026-05-28 07:28:50

and updated the source and destination to v0.7.3

Daniel
2026-05-28 07:29:51

is there an api endpoint to get the stream configuration @VIKASH CHOUDHARY? because through the interface it takes more than 5min to pen

VIKASH CHOUDHARY
2026-05-28 07:38:26

@Daniel For the API endpoint, you can copy the cURL directly from the browser’s Network tab for the stream API request.

Daniel
2026-05-28 09:11:44

here you go

Daniel
2026-05-28 09:13:28

i am sending you the full json in DM

πŸ†— VIKASH CHOUDHARY
Daniel
2026-05-28 09:13:35

as you can see it took 3min

VIKASH CHOUDHARY
2026-05-28 12:51:35

hey @Daniel,
Currently, your equality delete files are going into the null partition. Because of that, the deletes are not being applied correctly to your data, since the records being queried belong to a different partition.
This is happening because, in delete operations, the MongoDB oplog only contains the _id field and does not include the other column values. As a result, Olake is unable to determine the correct partition for the deleted record and creates the equality delete file in the null partition.

To fix this, we will be releasing a new patch soon that adds support for capturing the before image of delete operations from MongoDB oplogs. For this to work, you will need to enable the following setting for each collection:
changeStreamPreAndPostImages: { enabled: true }
Once this is enabled, Olake will be able to read all column values from the delete event and create the equality delete file in the correct partition.

Daniel
2026-05-28 15:02:07

so it is an option to enable with DBAs i guess. but let me ask a question so i am sure i understand, what happens if the partition change? if you have an update of this same record where the partition is year of field sampledate. let's say i have a first record with a sampledate=2025 and then an update to fix data that says the sample_date=2024 (it will write in another patition, will this be considered an update with only one record, or since there are 2 different partitions there will be 2 records in the lakehouse?)

shubham
2026-05-28 17:49:32

@Daniel

there will be 2 records in the lakehouse
yes, it will have 2 copies when you query. Ideally you should choose non-changing partition columns

Daniel
2026-05-28 21:06:11

is this a limitation of olake or iceberg? it seems a bit strange to me. because usually the sample_date does not change but it could be an error that needs to be updated and i don't see any field where it could not be an error. we are never safe of that. it s bad if we have duplicated records like that. so what could be the solution?

shubham
2026-05-29 03:11:29

@Daniel yes its an Iceberg limitation.


But there is a way to handle it. If the previous row is deleted you can identify that from deleted flag that OLake creates (as one of the columns).

So while querying we can always filter out deleted rows.

VIKASH CHOUDHARY
2026-05-29 18:07:59

Hey @Daniel, we have released Olake v0.7.4 with support for capturing deletes from Mongo CDC using pre-images.
Please enable: changeStreamPreAndPostImages: { enabled: true } for each collection.
Once enabled, equality deletes will be written to the correct partition and applied correctly.

Anirudh Anirudh
2026-05-16 11:27:40

Hi team, any possibility that olake may create corrupt parquet files in any situation?
source postgres , olake version v0.3.13
dest is aws s3,
reason why i ask is my donwstream jobs on databricks failed with a couple of errors which happen when corrupted files appear at src
i also had claude check the file in question and it gave a similar answer, attaching in thread

πŸ‘€ Vaibhav Verma, Merlyn, Ankit Sharma, Nayan Joshi
7 replies
Anirudh Anirudh
2026-05-16 11:27:54
The file is corrupt. Here's the breakdown:

- Magic bytes (PAR1) are present at both start and end β€” so the file wasn't truncated mid-upload.
- Footer size is 106.8 MB on a 370 MB file β€” that's ~29% of the file just for metadata, which is wildly abnormal. A healthy parquet
footer is usually a few KB to a few MB at most.
- PyArrow's Thrift deserializer hits its size limit trying to parse that footer, hence Exceeded size limit.

What likely happened: the writer (RudderStack data plane or whatever produced this file) wrote an enormous number of tiny row
groups, bloating the footer metadata. Or the footer size field itself got bit-flipped/corrupted during write/flush.

What you can try:
Anirudh Anirudh
2026-05-16 11:28:29

not urgent as i could probably run a full load, but lmk in either case

Vaibhav Verma
2026-05-16 13:28:11

@Anirudh Anirudh Can you share the corrupted parquet over the private chat, we will try to check and debug the issue and let you know soon.

Anirudh Anirudh
2026-05-16 13:54:18

sent it @Vaibhav Verma

πŸ‘ Vaibhav Verma
Vaibhav Verma
2026-05-18 10:35:29

@Anirudh Anirudh We investigated the file. It does not appear to be corrupt as the PAR1 magic bytes are valid and the row group data is intact.

The failure is caused by oversized Parquet footer metadata. Parquet stores column statistics (min/max values) in the footer, and in this file media_url column contains a ~106 MB base64-encoded MP4 value. That value ended up in the column statistics, inflating the footer to ~106 MB and triggering the reader's 100 MB Thrift deserialization limit.

We’re looking into limiting/truncating metadata generation for such columns to avoid oversized footers.

You can raise an issue for this here: https://github.com/datazip-inc/olake/issues. Also, please let us know if this is urgent on your side

Vaibhav Verma
2026-05-18 10:54:39

or as a workaround you can try increasing thrift deserialization limit of your downstream jobs greater than your metadata size.

Anirudh Anirudh
2026-05-19 11:07:06

Hi @Vaibhav Verma thanks for catching it, this is definitely a mistake on our end, of pushing the whole mp4 to a db row should not be intended, as for the urgency, i dont think this is very urgent as imo it shouldnt have happened in the first place, anyways, thanks again, good day

πŸ‘ Vaibhav Verma
Daniel
2026-05-18 08:07:05

I have a kafka job which is running for 4 days... but it does nothing. see the last logs are from 4 days ago and no errors:

14/05/2026
08:40:15
info
Thread[topics.cmd.patient.patient_01KRJT947QVKG0GDNWRZ44XAXD:50053] 08:40:15.057 [grpc-default-executor-0] INFO io.debezium.server.iceberg.tableoperator.IcebergTableOperator - Successfully committed 1 data files and 0 delete files for thread: topics.cmd.patient.patient_01KRJT947QVKG0GDNWRZ44XAXD
14/05/2026
08:40:15
info
Thread[topics.cmd.patient.patient_01KRJT947QVKG0GDNWRZ44XAXD:50053] 08:40:15.058 [grpc-default-executor-0] INFO io.debezium.server.iceberg.rpc.OlakeRowsIngester - [Thread-26-21708437671527] Total time taken: 1278 ms
14/05/2026
08:40:15
info
Thread[topics.cmd.patient.patient_01KRJT947QVKG0GDNWRZ44XAXD]: shutting down Iceberg server on port 50053
14/05/2026
08:40:15
info
committed 1 partitions for reader group_01KRJT947PRYNFAGM6D1QXG31M
14/05/2026
08:40:15
info
updated global state with consumer_group_id: olake-consumer-group-1776698913 for 1 streams

2 replies
Duke
2026-05-18 09:13:45

Hi @Daniel, can you share the full logs of Kafka sync that is running, worker logs and kafka version? Also can you share all the pods which are running (if you are running via Kubernetes) or else provide all the docker containers running (if you are running via Docker). Also if possible do you know if consumer rebalance has taken place during sync, or the messages of a partition to be synced were expired mid sync? (as per kafka's retention policy)

Vishal M
2026-05-27 08:45:09

Hi @Daniel, just checking in, are you still facing this issue?

Anh Nguyen Thach
2026-05-18 13:02:23

Hi, i got this error when create job. how can i fix it. Im moving data from postgres rds to s3 parquet

πŸ‘€ Vaibhav Verma, Merlyn
5 replies
Nayan Joshi
2026-05-18 13:05:49

Can you please share a screenshot of the API error response?
You can get this from the browser’s Network tab:

  1. Right click on the page and click "Inspect"

  2. Open the "Network" tab

  3. Refresh the page and reproduce the issue

  4. Click on the failed API request

  5. Take a screenshot of the response and share it here

Anh Nguyen Thach
2026-05-18 13:06:12

Thread Reply: None

Nayan Joshi
2026-05-18 13:15:20

The error is coming from nginx reverse proxy. Please increase the clientmaxbody_size in your nginx config to 64mb. If it still fails with same error try to increase the value to match the size of your streams. If the issue still persists please let us know.

Anh Nguyen Thach
2026-05-18 16:47:40

after i set it to 100mb, it worked. but i got another issue, i setup the job config through UI

Anh Nguyen Thach
2026-05-18 16:48:15

how can i fix it @Nayan Joshi πŸ™ tks u so much

Anh Nguyen Thach
2026-05-19 04:30:03

hi team, i got this error, im hosting using helm. source is postgresql, output is s3 parquet. I setup job config and destination, sources though UI. How can i fix this? thank u so much

12 replies
Vishal M
2026-05-19 04:47:39

@Anh Nguyen Thach could you please download the logs and share it here. You could use the download button at the right bottom in the job logs page. Thanks

Anh Nguyen Thach
2026-05-19 05:15:50

here it is

πŸ‘€ Vishal M
Vishal M
2026-05-19 06:29:40

@Anh Nguyen Thach Could you please share the source config from the payload hiding all the sensitive info.

You can get it from the network tab:

  1. Go to the source page,

  2. Click on the edit option on the desired source

  3. You can find the property "config" in the response.


Also, if your credentials contain " in them, escape it with a backslash .
Example: {"password": "my"password"} to {"password":"my\"password"}

Anh Nguyen Thach
2026-05-19 06:41:50
{
"success": true,
"message": "source '1' retrieved successfully",
"data": {
"id": 1,
"name": "db",
"type": "postgres",
"version": "v0.7.3",
"config": "{\"database\":\"db\",\"host\":\"local.com\",\"max_threads\":3,\"password\":\"SADASDASD\",\"port\":5432,\"retry_count\":3,\"schemas\":[],\"ssh_config\":{\"type\":\"no_tunnel\"},\"ssl\":{\"mode\":\"disable\"},\"update_method\":{\"initial_wait_time\":120,\"publication\":\"olake_uat_publication\",\"replication_slot\":\"olake_uat_s3_slot\",\"type\":\"CDC\"},\"username\":\"db\"}",
"created_at": "2026-05-18T12:52:27Z",
"updated_at": "2026-05-18T12:52:27Z",
"created_by": "admin",
"updated_by": "admin",
"jobs": [
{
"name": "tst",
"id": 5,
"activate": true,
"destination_name": "sv-uat-shared-data-lake",
"destination_type": "parquet",
"last_run_time": "2026-05-19T06:32:00Z",
"last_run_state": "Running"
}
]
}
}
Vishal M
2026-05-19 06:48:54

@Anh Nguyen Thach are you sure this is the source associated with the Job in the screenshot provided.

I can see the Job Name in the image is "avepoint_sync" and it's id is 2 but I couldn't find the same in the Associated Jobs in the provided payload. Could you please confirm this.

"jobs": [
{
"name": "tst",
"id": 5,
"activate": true,
"destination_name": "sv-uat-shared-data-lake",
"destination_type": "parquet",
"last_run_time": "2026-05-19T06:32:00Z",
"last_run_state": "Running"
}
]

Anh Nguyen Thach
2026-05-19 06:50:35

sure, i just delete and recrete the job and changed its name

Anh Nguyen Thach
2026-05-19 06:51:16

Thread Reply: None

πŸ‘ Vishal M
Anh Nguyen Thach
2026-05-19 07:30:57

Are there any ways to fix this? or i must using olake CLI? @Vishal M

Vishal M
2026-05-19 07:43:27

@Anh Nguyen Thach We are looking into, will get back shortly.

❀️ Anh Nguyen Thach
Vishal M
2026-05-19 07:59:28

@Anh Nguyen Thach can we get on a quick call to debug this issue? Let us know a good time anytime today

Anh Nguyen Thach
2026-05-19 08:04:31

yes, im free now

Vishal M
2026-05-19 08:06:16

Please join here:
https://meet.google.com/fwo-fugn-cyc

meet.google.com
βœ… Anh Nguyen Thach
Merlyn
2026-05-19 10:03:36

added an integration to this channel: Canny

Antonio
2026-05-21 15:36:19

did anyone have this problem?

6 replies
Antonio
2026-05-21 15:36:39

cannot seems to add a catalog at all

Antonio
2026-05-21 15:38:05

looking at the logs of UI:

4)
2026-05-21T15:34:17Z WRN failed to fetch image tags online for %s: %s. Cached fallback unavailable on Kubernetes (no Docker daemon)%!(EXTRA string=olakego/source-oracle, **errors.errorString=docker hub api request failed with status code: 504)
[GIN] 2026/05/21 - 15:34:25 | 200 | 2.61ms | 127.0.0.1 | GET "/api/v1/project/123/destinations"
2026-05-21T15:34:47Z WRN failed to fetch image tags online for %s: %s. Cached fallback unavailable on Kubernetes (no Docker daemon)%!(EXTRA string=olakego/source-mongodb, **errors.errorString=docker hub api request failed with status code: 504)


2026-05-21T15:35:17Z WRN failed to fetch image tags online for %s: %s. Cached fallback unavailable on Kubernetes (no Docker daemon)%!(EXTRA string=olakego/source-kafka, **errors.errorString=docker hub api request failed with status code: 504)
2026-05-21T15:35:47Z WRN failed to fetch image tags online for %s: %s. Cached fallback unavailable on Kubernetes (no Docker daemon)%!(EXTRA string=olakego/source-s3, **errors.errorString=docker hub api request failed with status code: 504)
2026-05-21T15:36:18Z WRN failed to fetch image tags online for %s: %s. Cached fallback unavailable on Kubernetes (no Docker daemon)%!(EXTRA string=olakego/source-db2, **errors.errorString=docker hub api request failed with status code: 504)
2026-05-21T15:36:48Z WRN failed to fetch image tags online for %s: %s. Cached fallback unavailable on Kubernetes (no Docker daemon)%!(EXTRA string=olakego/source-mssql, **errors.errorString=docker hub api request failed with status code: 504)
2026-05-21T15:36:48Z ERR error in request /api/v1/project/123/destinations/versions: failed to get driver image tags: no tags found for image:
[GIN] 2026/05/21 - 15:36:48 | 500 | 4m0s | 127.0.0.1 | GET "/api/v1/project/123/destinations/versions?type=iceberg"
[GIN] 2026/05/21 - 15:37:11 | 200 | 2.43ms | 127.0.0.1 | GET "/api/v1/project/123/destinations"
2026-05-21T15:37:19Z WRN failed to fetch image tags online for %s: %s. Cached fallback unavailable on Kubernetes (no Docker daemon)%!(EXTRA string=olakego/source-mysql, **errors.errorString=docker hub api request failed with status code: 504)
does it need to be able to connect to internet to download any proper docker images?

πŸ‘€ Nayan Joshi
Rohan Khameshra
2026-05-21 15:40:05

@Nayan Joshi

Antonio
2026-05-21 15:44:30

/api/v1/project/123/destinations/ where this rest call come from? I mean with project 123?

Nayan Joshi
2026-05-21 16:09:50

@Antonio Yes, OLake requires access to Docker images to fetch and run the connector images.
You currently have 2 options:

  1. Use OLake with internet access so it can pull the required images from Docker Hub.

  2. Use OLake in an offline setup:


Your current logs indicate that OLake is unable to reach Docker Hub, which is why the image tag fetching is failing.

OLake
OLake
Antonio
2026-05-21 21:16:47

yep got it - open a issue regarding something - because clicking create a catalog it took 15 seconds to actually show up the dialog/prompt for doing it, and checking was due the connection against docker https://github.com/datazip-inc/olake-ui/issues/380

Antonio
2026-05-22 08:18:09

Regarding the issue above I can try to tackle some of those issue in a PR

4 replies
Nayan Joshi
2026-05-22 10:26:50

Yes you can definitely do that. Once verified that its a valid issue.

Vishal M
2026-05-25 09:31:11

@Antonio we have replied to the issue raised on GitHub, and asked a couple of questions could you please check: https://github.com/datazip-inc/olake-ui/issues/380#issuecomment-4533155841

Antonio
2026-05-25 14:25:09

i'm on holiday πŸ™‚ will come back and check soon

πŸ‘ Vishal M
Arsalan Ahmed
2026-06-15 06:27:51

@Antonio We have released the fix for issue https://github.com/datazip-inc/olake-ui/issues/380#issuecomment-4533155841 Please upgrade olake-ui and olake-fusion to latest version to verify the fix.

βœ… Antonio
Antonio
2026-05-22 10:26:05

I opened a new issue https://github.com/datazip-inc/olake-ui/issues/381

is it ok for you if I work on these a little?

2 replies
Nayan Joshi
2026-05-22 10:30:46

@Antonio We will check once if this issue is a genuine problem. Once verified, we will update you the same and you can start working on it. Until then please give us some time to check on the issue.

βœ… Antonio
Antonio
2026-05-22 10:31:03

sure πŸ™‚

Antonio
2026-05-26 10:21:39

I am trying to do some maintanance - Configuring now some tables maintance for Fusion, but

2026/05/26 10:20:37 new sql script submit, current thread pool state. [Active: 1, PoolSize: 1]
2026/05/26 10:20:37 terminal session dose not exists. create session first
2026/05/26 10:20:40 create a new terminal session.
2026/05/26 10:20:40 fetch terminal session: b1d7d737-db02-4659-b3c5-616c34b07be5-null-null-airflow

8 replies
Ankit Sharma
2026-05-26 10:22:27

@Antonio can you retry one more time once?

Antonio
2026-05-26 10:23:39

Yes sure πŸ™‚

Meanwhile, jumping on a different namespace in same catalog

2026-05-26T10:22:29Z ERR error in request /api/opt/v1/airflow/talkdesk/tables: failed to fetch latest Lite process info: failed to get latest MINOR optimizing process for airflow.talkdesk.user_status: failed to get latest MINOR process for airflow.talkdesk.user_status: failed to send request: Get "http://olake-fusion-rest.olake.svc.cluster.local:1630/api/ams/v1/tables/catalogs/airflow/dbs/talkdesk/tables/user_status/optimizing-processes?apiKey=obfuscated: context canceled

Antonio
2026-05-26 10:24:20

Trying to understand where this issue come from - I need to probably see the logs of Polaris as well since could be something there

πŸ‘€ Ankit Sharma
Antonio
2026-05-26 10:26:22

Regarding the first error above, this is the full error

2026/05/26 10:24:39 new sql script submit, current thread pool state. [Active: 0, PoolSize: 1]
2026/05/26 10:24:39 terminal session dose not exists. create session first
2026/05/26 10:24:39 create a new terminal session.
2026/05/26 10:24:39 fetch terminal session: 1ccf00f5-95e1-429d-9d10-a80be7dc1cb0-null-null-airflow
setup session, session factory: org.apache.amoro.server.terminal.local.LocalSessionFactory
spark.sql.catalog.airflow.catalog-impl org.apache.iceberg.rest.RESTCatalog
spark.sql.catalog.airflow.table.self-optimizing.quota 0.1
spark.sql.catalog.airflow.client.region eu-west-1
spark.sql.catalog.airflow.warehouse airflow
spark.sql.catalog.airflow.uri
spark.sql.catalog.airflow.table.self-optimizing.enabled false
spark.sql.catalog.airflow.cache-enabled false
spark.sql.catalog.airflow.rest.auth.type oauth2
spark.sql.catalog.airflow.table.self-optimizing.group spark-container
spark.sql.catalog.airflow.credential spark.sql.catalog.airflow.table-formats ICEBERG
spark.sql.catalog.airflow.scope PRINCIPAL_ROLE:ALL
spark.sql.catalog.airflow.created-at 22 May 2026
spark.sql.catalog.airflow org.apache.iceberg.spark.SparkCatalog
spark.sql.mixed-format.refresh-catalog-before-usage true
2026/05/26 10:24:39 session configuration: catalog.airflow.table.self-optimizing.group => spark-container
2026/05/26 10:24:39 session configuration: spark.sql.catalog.airflow.created-at => 22 May 2026
2026/05/26 10:24:39 session configuration: spark.sql.mixed-format.refresh-catalog-before-usage => true
2026/05/26 10:24:39 session configuration: catalog.airflow.uri => https://VW79156.eu-west-1.snowflakecomputing.com/polaris/api/catalog
2026/05/26 10:24:39 session configuration: spark.sql.catalog.airflow.credential => MkvFvBEktCM7s50ZntdvKRxnCS0=:5iJ9qx58XxV7K97OkxdGPah3RRgSm9LY8IY6Zt0gmPY=
2026/05/26 10:24:39 session configuration: session.catalogs => airflow
2026/05/26 10:24:39 session configuration: spark.sql.catalog.airflow.uri => https:///polaris/api/catalog
2026/05/26 10:24:39 session configuration: session.fetch-size => 1000
2026/05/26 10:24:39 session configuration: spark.sql.catalog.airflow.table.self-optimizing.group => spark-container
2026/05/26 10:24:39 session configuration: spark.sql.catalog.airflow.warehouse => airflow
2026/05/26 10:24:39 session configuration: catalog.airflow.warehouse => airflow
2026/05/26 10:24:39 session configuration: spark.sql.catalog.airflow.table.self-optimizing.quota => 0.1
2026/05/26 10:24:39 session configuration: catalog.airflow.cache-enabled => false
2026/05/26 10:24:39 session configuration: catalog-url-base => thrift://127.0.0.1:1260
2026/05/26 10:24:39 session configuration: catalog.airflow.table.self-optimizing.enabled => false
2026/05/26 10:24:39 session configuration: spark.sql.catalog.airflow.catalog-impl => org.apache.iceberg.rest.RESTCatalog
2026/05/26 10:24:39 session configuration: spark.sql.catalog.airflow.client.region => eu-west-1
2026/05/26 10:24:39 session configuration: catalog.airflow.client.region => eu-west-1
2026/05/26 10:24:39 session configuration: session.catalog.airflow.connector => iceberg
2026/05/26 10:24:39 session configuration: spark.sql.catalog.airflow.table-formats => ICEBERG
2026/05/26 10:24:39 session configuration: catalog.airflow.table-formats => ICEBERG
2026/05/26 10:24:39 session configuration: catalog.airflow.table.self-optimizing.quota => 0.1
2026/05/26 10:24:39 session configuration: catalog.airflow.scope => PRINCIPAL_ROLE:ALL
2026/05/26 10:24:39 session configuration: terminal.sensitive-conf-keys =>
2026/05/26 10:24:39 session configuration: catalog.airflow.created-at => 22 May 2026
2026/05/26 10:24:39 session configuration: catalog.airflow.credential =>
2026/05/26 10:24:39 session configuration: catalog.airflow.rest.auth.type => oauth2
2026/05/26 10:24:39 session configuration: spark.sql.catalog.airflow.table.self-optimizing.enabled => false
2026/05/26 10:24:39 session configuration: spark.sql.catalog.airflow.scope => PRINCIPAL_ROLE:ALL
2026/05/26 10:24:39 session configuration: catalog.airflow.catalog-impl => org.apache.iceberg.rest.RESTCatalog
2026/05/26 10:24:39 session configuration: spark.sql.catalog.airflow => org.apache.iceberg.spark.SparkCatalog
2026/05/26 10:24:39 session configuration: spark.sql.catalog.airflow.cache-enabled => false
2026/05/26 10:24:39 session configuration: spark.sql.catalog.airflow.rest.auth.type => oauth2
2026/05/26 10:24:39
2026/05/26 10:24:39 prepare execute statement, line:1
2026/05/26 10:24:39 ALTER TABLE test_olake.test_olake SET TBLPROPERTIES ('self-optimizing.minor.trigger.cron' = '0 ** ** ** **', 'self-optimizing.major.trigger.cron' = '0 **/8 ** ** **', 'self-optimizing.full.trigger.cron' = '', 'self-optimizing.target-size' = '536870912')

πŸ†— Ankit Sharma
Ankit Sharma
2026-05-26 11:40:26

@Antonio are you able to connect it?

Antonio
2026-05-26 12:35:10

Sorry After few retries it indeed was able to apply the changes to Amoro πŸ‘

Antonio
2026-05-26 12:45:30

@Ankit Sharma if I need to check the logs for Fusion to run the scheduled maintance, which pods should I look at? of which service?

Antonio
2026-05-26 12:51:20

oh ok yes in the amoro-optimizer saw it

βœ… Ankit Sharma, Rohan Khameshra
Anh Nguyen Thach
2026-05-26 11:30:58

Hi, I’m running OLAKE on Kubernetes using Helm.
Setup:
- Source: PostgreSQL
- Destination: S3 / Iceberg
- Pod memory: increased from 16GB to 32GB
- Sync mode: full load / CDC
At first I thought the job failed because of OOM or resource limits, so I increased memory from 16GB to
32GB. But the same error still happens, so it does not look like a memory/resource issue. Why does context canceled make the sync job fail?

17 replies
Anh Nguyen Thach
2026-05-26 11:31:17

Thread Reply: None

VIKASH CHOUDHARY
2026-05-26 11:49:24

@Anh Nguyen Thach can you share sync logs as well, from download logs button from ui

Anh Nguyen Thach
2026-05-26 12:39:42

Thread Reply: None

πŸ‘ VIKASH CHOUDHARY
Anh Nguyen Thach
2026-05-26 12:39:46

@VIKASH CHOUDHARY here it is

VIKASH CHOUDHARY
2026-05-27 06:27:08

hey @Anh Nguyen Thach, Please let us know if you’re available for a call to debug this issue further, either now or at a time that works for you today.

VIKASH CHOUDHARY
2026-05-27 06:53:20

@Anh Nguyen Thach meanwhile, could you please re-run the sync and share the pod logs so we can debug the crash further?
Once the sync pod starts, run:

kubectl logs -f  -n  2>&1 | tee sync.log
Let it run until it fails, then share the sync.log file with us. This will help us capture the exact crash details.
Thanks!

VIKASH CHOUDHARY
2026-05-27 07:00:15

also What "context canceled" actually means here?

Anh Nguyen Thach
2026-06-08 04:20:12

Thread Reply: None

VIKASH CHOUDHARY
2026-06-08 06:18:34

@Anh Nguyen Thach please share complete sync logs

Anh Nguyen Thach
2026-06-08 06:35:13

u mean this log? i can't find any error logs, but the pod is still crashing

VIKASH CHOUDHARY
2026-06-08 06:36:33

@Anh Nguyen Thach please share from download logs button from ui

VIKASH CHOUDHARY
2026-06-08 07:05:03

@Anh Nguyen Thach There are 572 selected streams, and 32 GB RAM is likely too low for a sync of this size. Let's try running it with 128 or 256 GB RAM and see if the issue persists.

Anh Nguyen Thach
2026-06-08 07:58:50

What if I create an AWS Glue job for the full load and then trigger an OLake job mode CDC? Will it delete all the data I just loaded @VIKASH CHOUDHARY

VIKASH CHOUDHARY
2026-06-08 08:11:18

@Anh Nguyen Thach What is the max_threads value configured in the source settings? You can check it by clicking Edit Source and reviewing the configuration.

Anh Nguyen Thach
2026-06-08 08:12:09

it's 50 as default

VIKASH CHOUDHARY
2026-06-08 08:13:58

@Anh Nguyen Thach You can either reduce the max_threads setting or increase the machine's RAM. Running 50 threads on 32 GB of RAM may not be sufficient for that workload.

Ruslan Zhdan
2026-05-27 13:01:40

Hello team, probably someone faced with situation when table loaded via OLake and integrated with Snowflake via Glue integration.

So in UPSERT mode it breaks this integration and I cant use OLake in UPSERT mode.

πŸ‘€ Nayan Joshi, Rohan Khameshra, Merlyn, Badal, Siddharth
8 replies
Ruslan Zhdan
2026-05-27 13:16:54

Also the same with full refresh. It also break integration.

Badal
2026-05-28 09:59:57

Hi @Ruslan Zhdan, could you please share the error you are receiving in Snowflake while syncing data using the "Full Refresh" mode in OLake?

Ruslan Zhdan
2026-05-31 13:52:38

Sorry for the delay. I've checked and looks like everything ok regarding to the last case with full refresh.

As far as I can tell it keeps the same table UUID. Correct?

Ruslan Zhdan
2026-05-31 13:53:20

Probably you know during the performing full refresh table will be temporary unavailable?

Badal
2026-06-01 07:49:41

Hey @Ruslan Zhdan,

  1. Yes, the iceberg table-uuid is assigned when the iceberg table is created and is stored in its metadata.json file. It's mostly immutable. From OLake's side, we do not perform any operation that would change the iceberg table-uuid. Happy to know, if there is a specific scenario in your use case where you expect the iceberg table-uuid to change.

  2. Regarding table availability during a Full Refresh, could you elaborate a bit more on the scenario which you're referring to?

Ruslan Zhdan
2026-06-01 11:50:05

In case if i have small table which Im going to ingest. Table without any anchor colum with timestamp and records can be updated. Im going to use Full Replace each time and I have some doubts about data consistency and table can be unavailable because Olake perform "Clear destination" first. Is it correct?

And during the write phase. It works with Iceberg branches? Like first of all new snapshot on stage branch and after that merge main?

I've wanted to make sure with full replace table will exists and data will be consistent during writing new snapshot.

Badal
2026-06-01 12:19:02

I get it, @Ruslan Zhdan


1. Yes. Every time you do a full refresh for the same job, clear destination first drops the iceberg table from the catalog, leading to table unavailability for a short period of time.

Another approach, would be to use append-only mode job for your iceberg table. But, this would create duplicate rows of data for your cdc changes. For now, from the query engine side you can write the logic to dedup the rows.

2. No, towards the write phase, we don't use Iceberg branches right now, we directly create the new snapshot on the main branch.

Internally, we are working on a solution which would make Snowflake, as a query engine, compatible with OLake's Upsert job mode.

Ruslan Zhdan
2026-06-01 16:35:24

Thanks a lot for your support.

βœ… Badal
Anh Nguyen Thach
2026-06-10 08:51:40

Hi Team, it seems like the null LOB column issue from AWS DMS is also happening in Olake. Some LOB columns are coming up null during CDC. The source is Postgres and the destination is S3 Parquet. How can we handle this?

πŸ‘€ Merlyn, Saksham samarth
22 replies
Saksham samarth
2026-06-10 13:47:48

@Anh Nguyen Thach We're looking into this internally and will get back to you shortly.

Saksham samarth
2026-06-10 14:12:47

@Anh Nguyen Thach Can u also share datatypes of the null column ?

Anh Nguyen Thach
2026-06-10 16:25:43

@Saksham samarth it's jsonB

Anh Nguyen Thach
2026-06-10 16:28:11
SELECT
COUNT(**) AS total_rows,
COUNT(**) FILTER (WHERE pg_column_size(invoice_details) > 2048) AS rows_over_2kb,
MAX(pg_column_size(invoice_details)) AS max_size_bytes,
ROUND(MAX(pg_column_size(invoice_details)) / 1024.0, 2) AS max_size_kb,
ROUND(AVG(pg_column_size(invoice_details)), 2) AS avg_size_bytes
FROM invoices;
Anh Nguyen Thach
2026-06-10 16:28:35

Thread Reply: None

Anh Nguyen Thach
2026-06-10 16:33:57

almost all data in this column is between 3 kb and 15 kb

πŸ†— Saksham samarth
Saksham samarth
2026-06-11 06:26:49

Hey @Anh Nguyen Thach,
For now, you can use append-only mode as a workaround and write your own deduplication logic on the query side by retaining the required columns.
We'll be picking up support for this soon. In the meantime, you can create a GitHub issue here:
https://github.com/datazip-inc/olake/issues

πŸ‘ Anh Nguyen Thach
Anh Nguyen Thach
2026-06-11 06:40:41

here it is, thank you so much πŸ™

βœ… Saksham samarth
Anh Nguyen Thach
2026-06-11 10:27:05

it turned on REPLICA IDENTITY FULL on this table invoices but it still null for that colmn πŸ₯²

Saksham samarth
2026-06-11 10:35:29

@Anh Nguyen Thach, yes, this is expected. If you're okay with enabling REPLICA IDENTITY FULL and the additional WAL overhead it introduces, we can provide a quick fix for this.

Anh Nguyen Thach
2026-06-11 10:36:18

okay, i can enable REPLICA IDENTITY FULL

πŸ‘€ Saksham samarth
Saksham samarth
2026-06-11 12:44:19

@Anh Nguyen Thach We're planning to release a fix for this within the next 2 days.

πŸ™ Anh Nguyen Thach
Saksham samarth
2026-06-13 11:28:04

Hey @Anh Nguyen Thach, the fix has been released in v0.7.6. This patch specifically fixes the issue for REPLICA IDENTITY FULL tables.
Please test it when you get a chance and let us know if everything looks good. For previously lost data, you can run Clear Destination and resync.

Anh Nguyen Thach
2026-06-13 13:24:08

So I must turn on REPLICA IDENTITY FULL, right? Is there any way to handle this issue without setting it to full in the future?

πŸ‘€ Saksham samarth
Saksham samarth
2026-06-13 13:44:50

@Anh Nguyen Thach, yes, for now you'll need to enable REPLICA IDENTITY FULL to handle this case correctly. It's on our roadmap and we do plan to address it, but it's not something we're targeting in the near future. By the way, is the issue resolved on your end after enabling this mode?

πŸ™Œ Anh Nguyen Thach
Anh Nguyen Thach
2026-06-15 04:48:11

is it currently avaiable on helm? im using k8s to host olake

Saksham samarth
2026-06-15 05:48:26

@Anh Nguyen Thach,yes it is available now you can go to edit source and upgrade source version.

Anh Nguyen Thach
2026-06-15 09:36:31

seems ui-worker 0.3.8 only support olake v0.7.3 πŸ€”

Saksham samarth
2026-06-15 09:51:28

@Anh Nguyen Thach Can u share the screeshot?

Anh Nguyen Thach
2026-06-15 09:52:33

Thread Reply: None

Saksham samarth
2026-06-15 09:54:14

@Anh Nguyen Thach Can u upgrade version in source not in destination.

βœ… Anh Nguyen Thach
Jeevansh Gagroo
2026-06-19 10:36:40

Hi
Can someone please help me with the difference between Full Refresh + Incremental and Full Refresh + CDC sync modes ? Please point me to the documentation

1 reply
Siddharth
2026-06-19 10:42:29

Hi! You can find the explanation of sync modes in the documentation here: https://olake.io/docs/understanding/terminologies/olake/#2-sync-modes

OLake
πŸ’― Jeevansh Gagroo
Avinash Kumar 2
2026-06-23 07:30:54

Hi Team,
I understand that Olake Fusion helps with Iceberg table compaction. I wanted to check if there is any dashboard or monitoring interface available, similar to Amoro, that provides visibility into Iceberg table maintenance and metadata.
Specifically, is there a way to view:

  • Total number of snapshots for a table

  • Whether compaction has run successfully

  • Timestamp of the last compaction

  • Next scheduled compaction

  • Current table size and storage metrics

  • Backup/history information

  • Any compaction logs, status, or health metrics

If such a dashboard exists, could you please share the documentation or point me to the relevant section?
Thanks!

πŸ‘€ Merlyn
4 replies
Nayan Joshi
2026-06-23 07:43:01

@Avinash Kumar 2 At the moment, OLake Fusion provides visibility into compaction runs, logs, and a set of table and run level metrics through the UI. The following documentation covers the currently available monitoring capabilities:


Avinash Kumar 2
2026-06-23 10:00:55

@Nayan Joshi Which version of Olake has this?

Nayan Joshi
2026-06-23 10:11:31

@Avinash Kumar 2 You can follow the OLake Fusion setup guide here:
https://olake.io/docs/fusion/getting-started/configure-first-compaction/

The guide covers the prerequisites required to get started with Fusion, whether you're a first-time user or upgrading an existing OLake deployment. It also walks through setting up your first compaction pipeline.

Please let us know if you need any assistance with the setup.

OLake
Nayan Joshi
2026-06-23 10:20:49

@Avinash Kumar 2 If you are using helm and you are a new user please checkout quick start with helm

OLake
βœ… Avinash Kumar 2
Shiv Kumar
2026-06-24 06:24:20

Hi team, I did helm repo update and then I am trying helm upgrade --install olake but I am getting following error:

Error: UPGRADE FAILED: template: olake/templates/olake-ui/deployment.yamlπŸ’―17: executing "olake/templates/olake-ui/deployment.yaml" at : error calling index: reflect: slice index out of range
This is happening due to following line: github.com/datazip-inc/olake-helm/blob/…/deployment.yaml#…
As I am not using any imagePullSecrets so there won't be any first element in the array & will result into breaking of this code, can you please look into this.

3 replies
shubham
2026-06-24 06:25:33

@Schitiz Sharma cc.

Schitiz Sharma
2026-06-24 06:26:53

Hi @Shiv Kumar, we have fixed this issue in helm chart version 0.0.22. Instead of upgrading to version 0.0.21, you can directly upgrade to 0.0.22 and that will fix it.

Shiv Kumar
2026-06-24 06:28:36

Ohh my bad, it's working with latest version, thank you.

βœ… Schitiz Sharma
Sandeep Mukhopadhyay
2026-06-24 10:37:37

removed an integration from this channel: Canny

Avinash Kumar 2
2026-06-25 18:17:26

Hi team β€” hitting a wall adding a catalog in the OLake maintenance module (Amoro/Fusion) and wanted to check whether GCS-backed Lakekeeper is supported.
Setup: REST catalog β†’ Lakekeeper on GKE, Iceberg warehouse on GCS (gs://). I'm connecting via the GCS S3-interop endpoint (storage.googleapis.com) with HMAC keys, SigV4 disabled.
Progress so far: Auth is fine now β€” the connection test gets past Lakekeeper, fetches the warehouse location, and tries to write the test record. It fails at the write step with:
UnsupportedFileSystemException: No FileSystem for scheme "gs"

πŸ‘€ Saksham samarth
10 replies
Badal
2026-06-26 08:12:14

Hey @Avinash Kumar 2,

For a GCS-backed Lakekeeper using HMAC keys, you can create the warehouse in Lakekeeper with the Flavor set to s3-compat, and then try connecting it through Fusion.

If you still run into any issues, please share your Lakekeeper warehouse configuration and your Fusion Catalog configuration. We'll be more than happy to take a look and help you resolve this.

Do let us know how it goes.

Avinash Kumar 2
2026-06-26 10:16:33

Hey @Badal, What is the recommended or optimal frequency for running CDC jobs in production? For example, is running them every minute generally recommended, or is a 5–15 minute interval a better balance between data freshness and system overhead?

Badal
2026-06-26 10:33:45

Hey @Avinash Kumar 2,

There is no fix frequency to set for CDC. It primarily depends on the following factors:

  • Freshness required in your destination table.

  • Change logs accumulation (if not your read disk might start filling up).

Avinash Kumar 2
2026-06-26 11:05:01

@Badal I am unable to select Full Refresh + CDC option. Can you help?

Badal
2026-06-26 11:07:54

Hey @Avinash Kumar 2, please make sure you have selected Update Method to CDC, while creating the source.

Avinash Kumar 2
2026-06-26 11:12:13

@Badal I have have selected Update Method to CDC, while creating the source. Please check

Badal
2026-06-26 11:17:18

Hey @Avinash Kumar 2, can you please go through our doc for Setting up MySQL as a Source, and make sure you have all the CDC Prerequisite enabled.

This will help us verify that everything is configured correctly before we proceed.

OLake
Avinash Kumar 2
2026-06-26 12:51:55

@Badal
All the required CDC prerequisites appear to be enabled, except binlogrowmetadata, which is set to MINIMAL instead of FULL.
We've previously used CDC with Debezium using the same MySQL configuration, and it worked without any issues.
The current configuration is:

SHOW VARIABLES WHERE Variable_name IN (
'log_bin',
'binlog_format',
'binlog_row_image',
'binlog_row_metadata',
'gtid_mode'
);
+----------------------+---------+
| Variable_name | Value |
+----------------------+---------+
| binlog_format | ROW |
| binlog_row_image | FULL |
| binlog_row_metadata | MINIMAL |
| gtid_mode | ON |
| log_bin | ON |
+----------------------+---------+
Does OLake CDC specifically require binlogrowmetadata=FULL, or should MINIMAL also work? Could this be the reason for the issue we're seeing?

This is the warning which appear when source is created
2026-06-26T12:49:41Z INFO Found CDC Configuration
2026-06-26T12:49:41Z WARN binlogrowmetadata is not set to FULL
2026-06-26T12:49:41Z WARN CDC is not supported
2026-06-26T12:49:41Z INFO {"connectionStatus":{"status":"SUCCEEDED"},"type":"CONNECTION_STATUS"}


Please can you check if there is a workaround?
stream closed EOF for olake-fusion/test-connection-mysql-1782478180 (connector)

Badal
2026-06-26 12:53:58

cc: @VIKASH CHOUDHARY

VIKASH CHOUDHARY
2026-06-26 13:07:41

hey @Avinash Kumar 2 ,
OLake CDC requires binlogrowmetadata = FULL . OLake relies on binary log events being self-describing to column metadata directly from row events, which requires binlogrowmetadata = FULL.
for more info:
dev.mysql.com/doc/refman/…/replication-options-binary-log.html#…

πŸ†— Avinash Kumar 2
Jeevansh Gagroo
2026-06-26 11:09:19

Hi
I'm working on backfilling historical data into Iceberg tables and need to replicate the olakeid generation logic for composite primary keys.

Context:

  • My table has composite primary key: (date, id)

  • OLake destination config shows: identifier_fields: [date, id]


What I found in the docs:
"For composite primary keys, olakeid is a stable hash of all primary key columns"

What I need to know:
  1. Which hash algorithmdoes OLake Go use? (MD5, SHA256, etc.)

  2. How are the columns concatenated before hashing? (delimiter:|,,, none?)

  3. Confirmation on where ISO format is being used for timestamp columns like date . If not, then what ?


Example from my table:
date: 2026-06-24 00:00:00.000 +0530
id: 019efc0f-2a40-78ff-aee0-c8fdeb922bdc
_olake_id: b26e33d8f97c7cb274345b3b1596e6c3

I've tried:
  • MD5(date|id)doesn't match

  • MD5(id|date)β†’ doesn't match

  • MD5(id)β†’ doesn't match


Could you share the exact formula or point me to the relevant code in the OLake Go repository?
Thanks!

3 replies
VIKASH CHOUDHARY
2026-06-26 11:24:26

hey @Jeevansh Gagroo
OLake Go uses the standard MD5 algorithm.
- In the codebase, this is computed via md5.Sum([]byte(concatenatedString)).
for more info:
github.com/datazip-inc/olake/blob/…/utils.go#…

Jeevansh Gagroo
2026-06-26 11:32:07

great. thanks.
can you please link this to the documentation here as well for ease of access ?

OLake
πŸ‘€ Merlyn, Rohan Khameshra
VIKASH CHOUDHARY
2026-06-26 11:40:44

cc @Merlyn

Avinash Kumar 2
2026-06-30 10:12:47

Hi Team,
I'm facing an issue with Fusion compaction on an append-only Iceberg table that is continuously ingesting data from Kafka.
Initially, the Fusion Run History showed entries whenever Lite Compaction was triggered. However, it has now stopped showing any new runs.
Earlier, the Fusion pod was failing with a CreateContainerConfigError. We increased the pod resources, and that error is no longer occurring. However, even after resolving that issue:

  • No new compaction runs are appearing in the Run History.

  • The compaction does not seem to be getting triggered.

πŸ‘€ Merlyn, Badal
28 replies
Merlyn
2026-06-30 10:13:57

CC : @Ankit Sharma @Badal

πŸ‘ Ankit Sharma
Badal
2026-06-30 10:22:31

Hey @Avinash Kumar 2, are you using Helm for OLake-Fusion deployment?

In case yes, can you please share a screenshot of the pods running in your Olake namespace? (I just want to confirm whether a pod with optimizer in its name is running.)

Avinash Kumar 2
2026-06-30 10:38:50

Hi @Badal,
Yes optimizer pod is running


2026-06-30 09:47:24.968Z WARN  [main[] [ThriftClientPool] [P:|T:] - Transport open failed, service address: olake-fusion-fusion-optimizing.olake-fusion.svc.cluster.local:1261
2026-06-30 09:47:24.968Z WARN [main[] [ThriftClientPool] [P:|T:] - Transport open failed, service address: olake-fusion-fusion-optimizing.olake-fusion.svc.cluster.local:1261
2026-06-30 09:47:24.968Z INFO [main[] [ThriftClientPool] [P:|T:] - Reconnecting service address: olake-fusion-fusion-optimizing.olake-fusion.svc.cluster.local:1261
2026-06-30 09:47:24.968Z INFO [main[] [ThriftClientPool] [P:|T:] - Reconnecting service address: olake-fusion-fusion-optimizing.olake-fusion.svc.cluster.local:1261
2026-06-30 09:47:25.992Z WARN [main[] [ThriftClientPool] [P:|T:] - Reconnected service address: olake-fusion-fusion-optimizing.olake-fusion.svc.cluster.local:1261 failed
org.apache.amoro.shade.thrift.org.apache.thrift.transport.TTransportException: java.net.ConnectException: Connection refused
at org.apache.amoro.shade.thrift.org.apache.thrift.transport.TSocket.open(TSocket.java:231) ~[optimizer-job.jar:0.9-SNAPSHOT]
at org.apache.amoro.shade.thrift.org.apache.thrift.transport.layered.TFramedTransport.open(TFramedTransport.java:82) ~[optimizer-job.jar:0.9-SNAPSHOT]
at org.apache.amoro.client.ThriftClientPool$1.create(ThriftClientPool.java:100) ~[optimizer-job.jar:0.9-SNAPSHOT]
at org.apache.amoro.client.ThriftClientPool$1.create(ThriftClientPool.java:72) ~[optimizer-job.jar:0.9-SNAPSHOT]
at org.apache.commons.pool2.BasePooledObjectFactory.makeObject(BasePooledObjectFactory.java:71) ~[optimizer-job.jar:0.9-SNAPSHOT]
at org.apache.commons.pool2.impl.GenericObjectPool.create(GenericObjectPool.java:566) ~[optimizer-job.jar:0.9-SNAPSHOT]
at org.apache.commons.pool2.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:306) ~[optimizer-job.jar:0.9-SNAPSHOT]
at org.apache.commons.pool2.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:233) ~[optimizer-job.jar:0.9-SNAPSHOT]
at org.apache.amoro.client.ThriftClientPool.iface(ThriftClientPool.java:189) ~[optimizer-job.jar:0.9-SNAPSHOT]
at org.apache.amoro.client.OptimizingClientPools.getClient(OptimizingClientPools.java:38) ~[optimizer-job.jar:0.9-SNAPSHOT]
at org.apache.amoro.optimizer.common.AbstractOptimizerOperator.callAms(AbstractOptimizerOperator.java:53) ~[optimizer-job.jar:0.9-SNAPSHOT]
at org.apache.amoro.optimizer.common.OptimizerToucher.checkToken(OptimizerToucher.java:74) ~[optimizer-job.jar:0.9-SNAPSHOT]
at org.apache.amoro.optimizer.common.OptimizerToucher.start(OptimizerToucher.java:59) ~[optimizer-job.jar:0.9-SNAPSHOT]
at org.apache.amoro.optimizer.common.Optimizer.startOptimizing(Optimizer.java:65) ~[optimizer-job.jar:0.9-SNAPSHOT]
at org.apache.amoro.optimizer.spark.SparkOptimizer.main(SparkOptimizer.java:69) ~[optimizer-job.jar:0.9-SNAPSHOT]
at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:?]
at jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[?:?]
at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:?]
at java.lang.reflect.Method.invoke(Method.java:569) ~[?:?]
at org.apache.spark.deploy.JavaMainApplication.start(SparkApplication.scala:52) ~[spark-core_2.12-3.5.8.jar:3.5.8]
at org.apache.spark.deploy.SparkSubmit.org$apache$spark$deploy$SparkSubmit$$runMain(SparkSubmit.scala:1034) ~[spark-core_2.12-3.5.8.jar:3.5.8]
at org.apache.spark.deploy.SparkSubmit.$anonfun$submit$2(SparkSubmit.scala:174) ~[spark-core_2.12-3.5.8.jar:3.5.8]
at org.apache.spark.deploy.SparkHadoopUtil$$anon$1.run(SparkHadoopUtil.scala:62) ~[spark-core_2.12-3.5.8.jar:3.5.8]
at org.apache.spark.deploy.SparkHadoopUtil$$anon$1.run(SparkHadoopUtil.scala:61) ~[spark-core_2.12-3.5.8.jar:3.5.8]
at java.security.AccessController.doPrivileged(AccessController.java:712) [?:?]
at javax.security.auth.Subject.doAs(Subject.java:439) [?:?]
at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1878) [hadoop-client-api-3.3.4.jar:?]
at org.apache.spark.deploy.SparkHadoopUtil.runAsSparkUser(SparkHadoopUtil.scala:61) [spark-core_2.12-3.5.8.jar:3.5.8]
at org.apache.spark.deploy.SparkSubmit.doRunMain$1(SparkSubmit.scala:174) [spark-core_2.12-3.5.8.jar:3.5.8]
at org.apache.spark.deploy.SparkSubmit.submit(SparkSubmit.scala:222) [spark-core_2.12-3.5.8.jar:3.5.8]
at org.apache.spark.deploy.SparkSubmit.doSubmit(SparkSubmit.scala:91) [spark-core_2.12-3.5.8.jar:3.5.8]
at org.apache.spark.deploy.SparkSubmit$$anon$2.doSubmit(SparkSubmit.scala:1125) [spark-core_2.12-3.5.8.jar:3.5.8]
at org.apache.spark.deploy.SparkSubmit$.main(SparkSubmit.scala:1134) [spark-core_2.12-3.5.8.jar:3.5.8]
at org.apache.spark.deploy.SparkSubmit.main(SparkSubmit.scala) [spark-core_2.12-3.5.8.jar:3.5.8]
Caused by: java.net.ConnectException: Connection refused
at sun.nio.ch.Net.connect0(Native Method) ~[?:?]
at sun.nio.ch.Net.connect(Net.java:579) ~[?:?]
at sun.nio.ch.Net.connect(Net.java:568) ~[?:?]
at sun.nio.ch.NioSocketImpl.connect(NioSocketImpl.java:593) ~[?:?]
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:327) ~[?:?]
at java.net.Socket.connect(Socket.java:633) ~[?:?]
at org.apache.amoro.shade.thrift.org.apache.thrift.transport.TSocket.open(TSocket.java:226) ~[optimizer-job.jar:0.9-SNAPSHOT]
... 33 more
2026-06-30 09:47:25.992Z WARN [main[] [ThriftClientPool] [P:|T:] - Reconnected service address: olake-fusion-fusion-optimizing.olake-fusion.svc.cluster.local:1261 failed
org.apache.amoro.shade.thrift.org.apache.thrift.transport.TTransportException: java.net.ConnectException: Connection refused
at org.apache.amoro.shade.thrift.org.apache.thrift.transport.TSocket.open(TSocket.java:231) ~[optimizer-job.jar:0.9-SNAPSHOT]
at org.apache.amoro.shade.thrift.org.apache.thrift.transport.layered.TFramedTransport.open(TFramedTransport.java:82) ~[optimizer-job.jar:0.9-SNAPSHOT]
at org.apache.amoro.client.ThriftClientPool$1.create(ThriftClientPool.java:100) ~[optimizer-job.jar:0.9-SNAPSHOT]
at org.apache.amoro.client.ThriftClientPool$1.create(ThriftClientPool.java:72) ~[optimizer-job.jar:0.9-SNAPSHOT]
at org.apache.commons.pool2.BasePooledObjectFactory.makeObject(BasePooledObjectFactory.java:71) ~[optimizer-job.jar:0.9-SNAPSHOT]
at org.apache.commons.pool2.impl.GenericObjectPool.create(GenericObjectPool.java:566) ~[optimizer-job.jar:0.9-SNAPSHOT]
at org.apache.commons.pool2.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:306) ~[optimizer-job.jar:0.9-SNAPSHOT]
at org.apache.commons.pool2.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:233) ~[optimizer-job.jar:0.9-SNAPSHOT]
at org.apache.amoro.client.ThriftClientPool.iface(ThriftClientPool.java:189) ~[optimizer-job.jar:0.9-SNAPSHOT]
at org.apache.amoro.client.OptimizingClientPools.getClient(OptimizingClientPools.java:38) ~[optimizer-job.jar:0.9-SNAPSHOT]
at org.apache.amoro.optimizer.common.AbstractOptimizerOperator.callAms(AbstractOptimizerOperator.java:53) ~[optimizer-job.jar:0.9-SNAPSHOT]
at org.apache.amoro.optimizer.common.OptimizerToucher.checkToken(OptimizerToucher.java:74) ~[optimizer-job.jar:0.9-SNAPSHOT]
at org.apache.amoro.optimizer.common.OptimizerToucher.start(OptimizerToucher.java:59) ~[optimizer-job.jar:0.9-SNAPSHOT]
at org.apache.amoro.optimizer.common.Optimizer.startOptimizing(Optimizer.java:65) ~[optimizer-job.jar:0.9-SNAPSHOT]
at org.apache.amoro.optimizer.spark.SparkOptimizer.main(SparkOptimizer.java:69) ~[optimizer-job.jar:0.9-SNAPSHOT]
at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:?]
at jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[?:?]
at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:?]
at java.lang.reflect.Method.invoke(Method.java:569) ~[?:?]
at org.apache.spark.deploy.JavaMainApplication.start(SparkApplication.scala:52) ~[spark-core_2.12-3.5.8.jar:3.5.8]
at org.apache.spark.deploy.SparkSubmit.org$apache$spark$deploy$SparkSubmit$$runMain(SparkSubmit.scala:1034) ~[spark-core_2.12-3.5.8.jar:3.5.8]
at org.apache.spark.deploy.SparkSubmit.$anonfun$submit$2(SparkSubmit.scala:174) ~[spark-core_2.12-3.5.8.jar:3.5.8]
at org.apache.spark.deploy.SparkHadoopUtil$$anon$1.run(SparkHadoopUtil.scala:62) ~[spark-core_2.12-3.5.8.jar:3.5.8]
at org.apache.spark.deploy.SparkHadoopUtil$$anon$1.run(SparkHadoopUtil.scala:61) ~[spark-core_2.12-3.5.8.jar:3.5.8]
at java.security.AccessController.doPrivileged(AccessController.java:712) [?:?]
at javax.security.auth.Subject.doAs(Subject.java:439) [?:?]
at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1878) [hadoop-client-api-3.3.4.jar:?]
at org.apache.spark.deploy.SparkHadoopUtil.runAsSparkUser(SparkHadoopUtil.scala:61) [spark-core_2.12-3.5.8.jar:3.5.8]
at org.apache.spark.deploy.SparkSubmit.doRunMain$1(SparkSubmit.scala:174) [spark-core_2.12-3.5.8.jar:3.5.8]
at org.apache.spark.deploy.SparkSubmit.submit(SparkSubmit.scala:222) [spark-core_2.12-3.5.8.jar:3.5.8]
at org.apache.spark.deploy.SparkSubmit.doSubmit(SparkSubmit.scala:91) [spark-core_2.12-3.5.8.jar:3.5.8]
at org.apache.spark.deploy.SparkSubmit$$anon$2.doSubmit(SparkSubmit.scala:1125) [spark-core_2.12-3.5.8.jar:3.5.8]
at org.apache.spark.deploy.SparkSubmit$.main(SparkSubmit.scala:1134) [spark-core_2.12-3.5.8.jar:3.5.8]
at org.apache.spark.deploy.SparkSubmit.main(SparkSubmit.scala) [spark-core_2.12-3.5.8.jar:3.5.8]
Caused by: java.net.ConnectException: Connection refused
at sun.nio.ch.Net.connect0(Native Method) ~[?:?]
at sun.nio.ch.Net.connect(Net.java:579) ~[?:?]
at sun.nio.ch.Net.connect(Net.java:568) ~[?:?]
at sun.nio.ch.NioSocketImpl.connect(NioSocketImpl.java:593) ~[?:?]
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:327) ~[?:?]
at java.net.Socket.connect(Socket.java:633) ~[?:?]
at org.apache.amoro.shade.thrift.org.apache.thrift.transport.TSocket.open(TSocket.java:226) ~[optimizer-job.jar:0.9-SNAPSHOT]
... 33 more
2026-06-30 09:47:27.994Z INFO [main[] [ThriftClientPool] [P:|T:] - Reconnecting service address: olake-fusion-fusion-optimizing.olake-fusion.svc.cluster.local:1261
2026-06-30 09:47:27.994Z INFO [main[] [ThriftClientPool] [P:|T:] - Reconnecting service address: olake-fusion-fusion-optimizing.olake-fusion.svc.cluster.local:1261
2026-06-30 09:47:28.017Z INFO [main[] [OptimizerToucher] [P:|T:] - Adding register property heart-beat-interval:10000 into optimizer
2026-06-30 09:47:28.017Z INFO [main[] [OptimizerToucher] [P:|T:] - Adding register property heart-beat-interval:10000 into optimizer
2026-06-30 09:47:28.038Z INFO [main[] [OptimizerToucher] [P:|T:] - Registered optimizer to ams with token:618d2dfd-505a-49b8-bc4c-521ca690dbe0
2026-06-30 09:47:28.038Z INFO [main[] [OptimizerToucher] [P:|T:] - Registered optimizer to ams with token:618d2dfd-505a-49b8-bc4c-521ca690dbe0

Badal
2026-06-30 10:46:08

Hey @Avinash Kumar 2, thanks for sharing the screenshot.

Could please share the complete logs, that would be great for us to debug. kubectl logs > log.txt

Avinash Kumar 2
2026-06-30 11:28:20

@Badal

Badal
2026-06-30 12:21:01

Hey @Avinash Kumar 2, a few questions and requirements:

  1. Thanks for sharing the logs β€” but these are the optimizer logs, not the Fusion (AMS) pod logs. Would be great if you could share the olake-fusion pod logs.

  2. Also, please confirm the timestamps for:

  1. Since when the optimizer has been running

  2. When the Fusion pod was last restarted

Avinash Kumar 2
2026-06-30 12:58:11

2.
a. optimizer has been running for 3h7m
b. No restarts ever since we increased the resources of Fusion pod (It's been running for 3h7m)

Badal
2026-06-30 13:25:21

Hey @Avinash Kumar 2, can you please re-configure the cron for your iceberg table and check once.

In case you are applying a custom cron, **/5 ** ** ** ** this would be the format we support for an every 5 minute compaciton.

Avinash Kumar 2
2026-06-30 13:57:30

Hey @Badal, I configured like this

Ankit Sharma
2026-07-01 05:24:06

@Avinash Kumar 2 can we connect for a quick meet today? near 3 pm?

Avinash Kumar 2
2026-07-01 06:22:40

@Ankit Sharma Sure
CC: @Sricharan Sirpa

Ankit Sharma
2026-07-01 09:30:36

@Avinash Kumar 2 meet.google.com/qba-jjqa-woa

meet.google.com
Ankit Sharma
2026-07-01 18:05:10

@Avinash Kumar 2 I have checked the issue, the table cron is not running because of abruptly kill of AMS, due to which table stuck in planning phase.
We will release a fix for it soon ETA 1 day.
If you need to do it urgently you can follow below instruction
-> stop amoro service
-> run the status update from 500 to 700 in db in table_runtime table (we did it on call)
-> start ams

thanks

πŸ‘€ Merlyn
Avinash Kumar 2
2026-07-02 07:42:05

@Ankit Sharma Thanks!

πŸ‘ Ankit Sharma
Ankit Sharma
2026-07-02 17:15:55

@Avinash Kumar 2 we have released new image, if you have set latest and pod restart it will automatically fetch.

Ankit Sharma
2026-07-02 17:20:35

@Avinash Kumar 2 edit on last message:
currently helm has pull policy ifNotPresent that need to be changed to pull automatically,

  • either change the pull policy

  • or add image tag v0.1.3

πŸ‘ Badal, Avinash Kumar 2
Sricharan Sirpa
2026-07-03 05:45:19

@Ankit Sharma we tried the above steps, its working as of now.
Thank you so much
we upgrade the release is done.

βœ… Badal, shubham, Ankit Sharma, Merlyn
Avinash Kumar 2
2026-07-09 12:56:19

Hi @Ankit Sharma, we have started the append-only Kafka ingestion job again. This time, however, compaction doesn't seem to be running for this table. Additionally, the table is not appearing under the Optimizing tab in Amoro.
Could you please help us understand why the compaction isn't being triggered or if there's anything we should check on the Olake/Fusion/Iceberg side?

πŸ‘€ Badal
Ankit Sharma
2026-07-09 12:59:10

@Avinash Kumar 2 could you please share logs of fusion pod?
and the logs of fusion optimizer pod
thanks

Avinash Kumar 2
2026-07-09 13:37:43

Thread Reply: None

πŸ‘€ Ankit Sharma
Ankit Sharma
2026-07-09 17:30:04

@Avinash Kumar 2 it seems table is not enabled for compaction, have you taken screenshot after refresh of page?

Also can you just try disabling it and reenabling back ?

While doing this please check the fusion pod logs if you see any error.

Avinash Kumar 2
2026-07-10 06:14:57

@Ankit Sharma Yes, the table is enabled for compaction. I also tried disabling it and enabling it again, but the compaction run still doesn't seem to be starting. I checked the Fusion pod logs during the process as well and couldn't find any related errors.

πŸ‘€ Ankit Sharma
Ankit Sharma
2026-07-10 07:20:14

can we have a call at 4? @Avinash Kumar 2

Avinash Kumar 2
2026-07-10 07:48:44

@Ankit Sharma Yes sure!

Ankit Sharma
2026-07-10 10:30:33

@Avinash Kumar 2 here is the link : meet.google.com/fhs-ekdb-spo

meet.google.com
Avinash Kumar 2
2026-07-10 10:32:02

Joining..

Ankit Sharma
2026-07-10 11:29:10

@Avinash Kumar 2 this is same error that is being discussed here
The issue is with gcp.
we will release a fix for it.

Avinash Kumar 2 (https://getolake.slack.com/team/U0A6088AMM3)
Prasanna Kumar
2026-07-01 10:41:07

Hey team πŸ‘‹

We are running OLake CDC into Iceberg tables on S3 (Glue catalog, EMR 7.3) for a high frequency write heavy , table β€” ~11M records/day with 1-minute write frequency.

We are seeing significant equality delete file (content=2) accumulation β€” currently at 92-96% of total file count per partition. After investigation we traced this to OLake writing one equality delete file per CDC event using _olake_id as the delete identifier.

Two questions:

1. Can we change the sorted_by column from _olake_id to the table's natural primary key (id, bigint)? The current _olake_id is a synthetic varchar UUID which has sort locality for compaction β€” Iceberg's rewrite_data_files with delete-file-threshold=1 is not resolving the equality deletes efficiently because it cannot binary-search a random UUID.

2. Does the sorted_by column control which column OLake uses as the equality delete identifier? Or is the equality delete column configured separately at the OLake connector/job level?

Context: the table is partitioned on date_modified_day, with 99.86% of updates happening same-day. Changing the equality delete identifier to id (integer, unique, partition-stable) should allow compaction to resolve deletes efficiently and bring delete file percentage down from 92-96% to < 5%.

BTW we're not using Olake Fusion for compaction instead Spark SQL for the same

cc @Sandeep Singh

πŸ‘€ Nayan Joshi
17 replies
VIKASH CHOUDHARY
2026-07-01 11:20:12

hey @Prasanna Kumar,
olakeid is simply the stringified value of your table's primary key. OLake only generates an MD5 hash (which looks like a random UUID) if it can't detect a single primary key for the source table, could you confirm if your table has a primary key?
olakeid is used as the default identifier field in OLake, which means it automatically dictates both the equality delete column and the sorted_by order.

Prasanna Kumar
2026-07-02 04:20:55

the table has one (id) auto inc based
While now I understand about the olakeid, The challenge we face is given this is a fast moving table (rapid c and u operations ) , partitioned based on datemodified as day (yyyy/mm/dd), 99% of the updates happen within the same day. The data to delete file ratio is still high. In terms of numbers when queried the $files table,
0 7000+
1 21000 +
2 23800 +

Since the equality deletes are more , 8 files for every data file - compaction on this table is not helping to bring down the equality writes count.

While exploring on how do we over come this challenge ... One of the hint I guessed is to see if the value of olakeid could be tweaked...

Tech Stack

  • Olake Sync job on Upsert Mode - CDC Only

  • EMR - Spark jobs for compaciton

  • AWS Glue - Catalog


As a side exp ... we also ran Olake on append mode + CDC Only which had no eq.del files and enabled to reclaim the disk space ( exp snap and del orph files)

VIKASH CHOUDHARY
2026-07-02 06:17:45

hey @Prasanna Kumar, Can you please explain the problem you're currently facing and what outcome or solution you're expecting?

Prasanna Kumar
2026-07-02 07:23:25

As explained the context above ,
problem

  • higher number of delete files than data files .

  • compaction does not solved the problem - it consolidated the data files alone

Expected Outcome / solution
  • how to get rid of the delete files - to reclaim the disk space

VIKASH CHOUDHARY
2026-07-02 10:06:15

@Prasanna Kumar
In upsert mode, writing equality delete files cannot be avoided, whereas in append mode, no equality delete files are written. If you wants to reclaim disk space after compaction and remove orphan files, you'll need to configure your compaction job accordingly.

shubham
2026-07-02 10:24:49

  • compaction does not solved the problem - it consolidated the data files alone

Expected Outcome / solution
@Prasanna Kumar this is incorrect. Compaction do cleanup all deletes and make uniform data files set. (Now you might feel like its not cleaning up because while its running, more equality are coming as ingestion is happening at much fast pace)

Prasanna Kumar
2026-07-02 10:52:36

Understood.... we are running compaction on 1 day older partition (t-1) i.e only on that partition on a daily basis

shubham
2026-07-02 10:53:54

@Prasanna Kumar please try Fusion once. we are much efficient in compaction. 50% more faster than normal spark. you can run the light compaction at higher frequency to reduce small files overall. which is quite cheap as well

shubham
2026-07-02 12:40:42

also, if we can have a 15 min call about your usecase. Happy to discuss on it and help

Prasanna Kumar
2026-07-03 05:32:27

Sure @shubham we can ... Let us first try with Olake fusion on a a controlled env

βœ… shubham, Merlyn
Sandeep Singh
2026-07-13 09:51:13

We started olake-fusion on our uat env. While adding the catalog to olake fusion, I faced some issues and I have few questions:

  • Any reason why we are not allowing numbers in the catalog name?

  • The info box says if catalog name left empty, it will default to olake_iceberg, but the box is a required field

Badal
2026-07-13 11:04:33

Hey @Sandeep Singh, thanks for pointing it out!

  1. We'll add a quick fix to support numbers in the Catalog Name field in OLake Fusion. However, we don't plan to support special characters in catalog names.

  2. Thanks as well for reporting the incorrect info box message. We'll fix that in the upcoming update too.

Sandeep Singh
2026-07-13 13:22:12

Thank you.

Another doubt I had was regarding the driver version. I see there is a change in github.com/datazip-inc/olake/releases?page=2#… regarding the create one positional delete file per data file ref . If I have cdc changes from a version earlier than 0.7.0, are they not compatible fully with spark fusion?

Badal
2026-07-13 13:24:52

Hey @Sandeep Singh, there's nothing like that. It's fully compatible.

Badal
2026-07-14 04:32:32

  • Any reason why we are not allowing numbers in the catalog name?

  • The info box says if catalog name left empty, it will default to olake_iceberg, but the box is a required field


Hey @Sandeep Singh, both of these issues have been fixed in our new release, OLake-UI v0.4.9.

If you're using Helm, please redeploy your Helm release to pick up the latest changes.

EDIT: If you're using the latest image tag with Helm, you can simply delete the OLake UI pod and Kubernetes will recreate it with the latest image.

Sandeep Singh
2026-07-14 10:29:32

Thank you

Badal
2026-07-17 07:50:55

Hey @Sandeep Singh, just checking inβ€”did the OLake-UI v0.4.9 release resolve the issue you mentioned above?

Let us know if you're still facing any issues.

Avinash Kumar 2
2026-07-05 08:01:48

Hi team, since yesterday our Kafka ingestion jobs (cron every 5 min) have been failing. When checking logs, I'm getting:

failed to get task logs: logs directory not found: /tmp/olake-config/<task_id>: stat /tmp/olake-config/<task_id>: no such file or directory

Could someone help me figure out why this logs directory isn't being created/found? Thanks!

πŸ‘€ Ankit Sharma, Badal
10 replies
VIKASH CHOUDHARY
2026-07-05 08:16:15

hey @Avinash Kumar 2 ,
Could you please share the UI and worker logs? Also, are you using a Helm deployment or Docker?

VIKASH CHOUDHARY
2026-07-05 08:27:06

Also are you unable to view logs for other jobs as well?

Avinash Kumar 2
2026-07-05 09:06:25

@VIKASH CHOUDHARY

  • I'm using Helm Deployment

  • Currently only one job is running

shubham
2026-07-05 09:12:57

@Avinash Kumar 2

olake-workers 2026-07-05T08:40:00Z WRN failed to prepare workflow logger for workflowID=sync-123-2-2026-07-05T08:40:00Z: failed to create work directory: mkdir /data/olake-jobs/fe74286797419eb4aa8f462d75f6d8cd0d7ea59d579701ff8ce69a8224b77a2b: no space left on device

shubham
2026-07-05 09:13:47

@Avinash Kumar 2 are you not using NFS?

Avinash Kumar 2
2026-07-06 06:16:34

@shubham Yes we have enabled NFS server.

shubham
2026-07-06 06:18:36

@Avinash Kumar 2

please follow this for prod use cases :

olake.io/docs/install/kubernetes#…

OLake
πŸ‘ Avinash Kumar 2
Avinash Kumar 2
2026-07-06 13:48:07

Hi @shubham,
We've now moved to an external Filestore-backed NFS instead of the built-in OLake NFS server.
Quick question β€” is there any built-in TTL / automatic cleanup for the job metadata, config, and log files that OLake writes to the shared storage volume (/data/olake-jobs, /tmp/olake-config)? We noticed these directories aren't purged after a task completes or fails, and they accumulated until our previous NFS volume filled up. Wanted to confirm whether this is expected behavior and if there's a recommended retention/cleanup mechanism, or if we should build our own pruning job.

CC: @Sricharan Sirpa

shubham
2026-07-06 13:50:34

There is a log cleanup schedule/TTL in our docs. I am AFK. but you can search there. @Avinash Kumar 2

VIKASH CHOUDHARY
2026-07-06 13:55:42

@Avinash Kumar 2 please checkout following doc:
https://olake.io/docs/install/olake-ui/#log-retention

OLake
Avinash Kumar 2
2026-07-08 12:40:59

Hi team,
We're running a Full Refresh + CDC sync from MySQL at 1-minute frequency, using Lakekeeper (REST catalog) with GCS storage via HMAC keys, warehouse flavor set to s3-compat.
Full Refresh completed successfully, and the first few CDC syncs ran fine too β€” but some recent CDC jobs have started failing.
Attached the logs for reference.
Thanks!

πŸ‘€ Vaibhav Verma, Badal
6 replies
Vaibhav Verma
2026-07-08 13:12:11

Hi @Avinash Kumar 2, we are looking into this issue , will get back to you soon.

πŸ‘ Avinash Kumar 2
Avinash Kumar 2
2026-07-09 10:00:45

Hi @Vaibhav Verma, just wanted to check if there's any update on this issue, as it will help us plan the next steps. Thanks!

Vaibhav Verma
2026-07-09 10:01:54

@Avinash Kumar 2, we have figured out the issue and will be doing a release with the fix soon.
Will notify you once release is done

πŸ‘ Avinash Kumar 2
Vaibhav Verma
2026-07-10 13:55:37

Hi @Avinash Kumar 2, we have fixed this in olake v0.8.2, you can try that version.

If you still face any issue please let us know

Avinash Kumar 2
2026-07-13 06:11:59

@Vaibhav Verma Sure, thanks a lot!

πŸ‘ Vaibhav Verma
Ankit Sharma
2026-07-30 10:18:37

@Avinash Kumar 2 does the new version worked out for you? is your compaction job stable now?

Kim Tore Jensen
2026-08-04 11:11:12

Hi, I have a question about OLake + OAuth2.
We want to configure OLake to only accept logins from a specific user group in Entra ID. But it seems OLake doesn't support oauth2 for logins, only for connecting to sources. Is this correct? Are there plans for oauth support?

2 replies
Rohan Khameshra
2026-08-04 11:27:33

Hey @Kim Tore Jensen !
We are planning to keep this feature for managed SaaS offering of OLake, which is pretty close to its launch. Happy to chat for its beta access to you, if you are interested.

πŸ‘ Saksham samarth
Kim Tore Jensen
2026-08-05 07:07:34

I see. Perhaps another time then. We are not ready to consider a SaaS offering at this time, but thanks for the info πŸ™‚

πŸ‘ Rohan Khameshra, Saksham samarth, Ankit Sharma
vikassingh
2026-08-04 11:21:31

Hi team,
I'm trying to deploy OLake on AWS ECS Fargate instead of Kubernetes and have successfully deployed the following components:

  • OLake UI β†’ ECS Fargate

  • Temporal Server β†’ ECS Fargate

  • Aurora PostgreSQL β†’ Metadata database

  • Amazon S3 (private bucket with KMS encryption)

  • Amazon ECR for OLake images

  • AWS Cloud Map for service discovery

  • Application Load Balancer for UI

The UI is working correctly:
  • I can access the UI.

  • User signup/login works.

  • Temporal connectivity is working.

  • Worker starts successfully and registers with the Temporal task queue.

Worker startup logs:
starting OLake worker
executor environment: docker
database initialized
namespace default retention set to 168h0m0s
worker client created successfully
starting Temporal worker...
Started Worker
Namespace=default
TaskQueue=OLAKE_DOCKER_TASK_QUEUE
However, when I try to create a PostgreSQL source, the workflow fails with the following error:
failed to get source spec:
workflow execution failed

activity error:

image pull
183124052567.dkr.ecr.ap-south-2.amazonaws.com/olakego/source-postgres:v0.9.0

failed to connect to the docker API at unix:///var/run/docker.sock

dial unix /var/run/docker.sock:
connect: no such file or directory
It appears the Worker is trying to execute connectors using the local Docker daemon.
Since ECS Fargate doesn't expose /var/run/docker.sock, I'm unsure whether OLake officially supports running the Worker on ECS Fargate.
My questions are:
  1. Is deploying the OLake Worker on AWS ECS Fargate officially supported?

  2. If yes, what is the recommended connector execution mechanism on Fargate (since Docker socket isn't available)?

  3. Is there a configuration to use ECS Tasks, AWS Batch, or another executor instead of Docker?

  4. Or is the Worker currently expected to run only on Kubernetes or Docker hosts (e.g., ECS EC2)?

Any guidance or recommended deployment architecture for AWS would be greatly appreciated.
Thank you!

πŸ‘€ Rohan Khameshra, Saksham samarth, Ankit Sharma, Badal
1 reply
Saksham samarth
2026-08-04 12:23:02

hey @vikassingh AWS ECS Fargate is not officially supported and we currently don't have any plan to support it any time soon in Olake but we do support docker and helm so you can try that out.

Kim Tore Jensen
2026-08-07 13:44:04

I'm a bit curious how to get the CLI to run continuously when syncing Postgres with CDC.
Right now I get this output when running with --state /mnt/config/state.json , and then exit.
How can I configure olake cli to run continuously as a daemon (i.e. we want to run it as a sidecar along user-defined applications)

(... removed ...)
2026-08-07T13:39:55Z INFO Iceberg[50051] 13:39:55.245 [grpc-default-executor-1] INFO io.debezium.server.iceberg.rpc.OlakeRowsIngester - [Thread-29-6395037162323] Total time taken: 1 ms
2026-08-07T13:39:55Z DEBUG Thread[public.sample_data_01KZE77A3R8EVHFEVYB2FXB5P9]: Sent commit message: [Thread-29-6395037162323] Successfully committed data for thread public.sample_data_01KZE77A3R8EVHFEVYB2FXB5P9 2026-08-07T13:39:55Z DEBUG sent standby status message at LSN#0/19BD100
2026-08-07T13:39:58Z INFO Total records read: 0 | Total bytes read: 0 B
2026-08-07T13:39:58Z INFO Sync completed, wait 5 seconds cleanup in progress... 2026-08-07T13:40:03Z INFO Shutting down shared Iceberg JVM on port 50051

πŸ‘€ Saksham samarth, Merlyn
6 replies
Kim Tore Jensen
2026-08-07 13:48:20

I copied most of the configuration directly from examples in the documentation, modifying only for our Lakekeeper destination.

shubham
2026-08-07 13:51:53

@Kim Tore Jensen currently there is no continuous feature in CLI. (if you use OLake-ui, we have temporal which continuously syncs data β€” configurable via cron).

so you need to schedule your own cron/orchestration which will keep running every 10-15mins.

shubham
2026-08-07 13:53:39

Also we are planning continuous mode in next 2-3 months. You can discuss with our product team @Merlyn about requirements.

πŸ‘€ Merlyn
Kim Tore Jensen
2026-08-07 13:54:21

Aha! Thanks for clarifying 😊

πŸ‘ Saksham samarth
Kim Tore Jensen
2026-08-07 13:54:34

10-15 mins because of WAL snapshot timings?

shubham
2026-08-07 13:55:14

@Kim Tore Jensen no its not related to that. you can as low as 20-30 sec as well. depends on your use case.

Nitish Gupta
2026-08-09 12:20:12

{"level":"debug","time":"2026-08-09T09:34:05Z","message":"Thread[public.SegmentMember2_01KZJXQK2P9NFXCEJA7PQQJJV0]: sent batch to Iceberg server, response: successfully pushed records: 306"}
{"level":"info","time":"2026-08-09T09:34:05Z","message":"Thread[public.SegmentMember2_01KZJXQK2P9NFXCEJA7PQQJJV0]: successfully wrote 306 records"}
{"level":"info","message":"Thread[public.SegmentMember2_01KZJXQK2P9NFXCEJA7PQQJJV0:50055] 09:34:05.525 [grpc-default-executor-1] INFO io.debezium.server.iceberg.rpc.OlakeRowsIngester - [Thread-34-2951203554972590] Received commit request for thread: public.SegmentMember2_01KZJXQK2P9NFXCEJA7PQQJJV0","time":"20260809T09:34:05Z"}
{"level":"info","message":"Thread[public.SegmentMember2_01KZJXQK2P9NFXCEJA7PQQJJV0:50055] 09:34:06.879 [grpc-default-executor-1] INFO io.debezium.server.iceberg.tableoperator.IcebergTableOperator - Committing 13 data files and 13 delete files for thread: public.SegmentMember2_01KZJXQK2P9NFXCEJA7PQQJJV0","time":"20260809T09:34:06Z"}
{"level":"info","message":"Thread[public.SegmentMember2_01KZJXQK2P9NFXCEJA7PQQJJV0:50055] 09:34:07.924 [grpc-default-executor-1] INFO org.apache.iceberg.BaseMetastoreTableOperations - Successfully committed to table olake_iceberg.iceberg_mod_public.segmentmember2 in 457 ms","time":"20260809T09:34:07Z"}
{"level":"info","message":"Thread[public.SegmentMember2_01KZJXQK2P9NFXCEJA7PQQJJV0:50055] 09:34:07.924 [grpc-default-executor-1] INFO org.apache.iceberg.SnapshotProducer - Committed snapshot 7855686464676501021 (BaseRowDelta)","time":"20260809T09:34:07Z"}
{"level":"info","message":"Thread[public.SegmentMember2_01KZJXQK2P9NFXCEJA7PQQJJV0:50055] 09:34:08.091 [grpc-default-executor-1] INFO org.apache.iceberg.BaseMetastoreTableOperations - Refreshing table metadata from new version: s3://iceonnitish/iceberg_mod_public.db/segmentmember2/metadata/07727-34485458-e029-4d59-9c00-a8a0cc5c535b.metadata.json","time":"20260809T09:34:08Z"}
{"level":"info","message":"Thread[public.SegmentMember2_01KZJXQK2P9NFXCEJA7PQQJJV0:50055] 09:34:08.365 [grpc-default-executor-1] INFO org.apache.iceberg.metrics.LoggingMetricsReporter - Received metrics report: CommitReport{tableName=olake_iceberg.iceberg_mod_public.segmentmember2, snapshotId=7855686464676501021, sequenceNumber=7727, operation=overwrite, commitMetrics=CommitMetricsResult{totalDuration=TimerResult{timeUnit=NANOSECONDS, totalDuration=PT0.977623142S, count=1}, attempts=CounterResult{unit=COUNT, value=1}, addedDataFiles=CounterResult{unit=COUNT, value=13}, removedDataFiles=null, totalDataFiles=CounterResult{unit=COUNT, value=135812}, addedDeleteFiles=CounterResult{unit=COUNT, value=13}, addedEqualityDeleteFiles=CounterResult{unit=COUNT, value=13}, addedPositionalDeleteFiles=null, removedDeleteFiles=null, removedEqualityDeleteFiles=null, removedPositionalDeleteFiles=null, totalDeleteFiles=CounterResult{unit=COUNT, value=135764}, addedRecords=CounterResult{unit=COUNT, value=306}, removedRecords=null, totalRecords=CounterResult{unit=COUNT, value=1940799413}, addedFilesSizeInBytes=CounterResult{unit=BYTES, value=73602}, removedFilesSizeInBytes=null, totalFilesSizeInBytes=CounterResult{unit=BYTES, value=67303384638}, addedPositionalDeletes=null, removedPositionalDeletes=null, totalPositionalDeletes=CounterResult{unit=COUNT, value=86224613}, addedEqualityDeletes=CounterResult{unit=COUNT, value=306}, removedEqualityDeletes=null, totalEqualityDeletes=CounterResult{unit=COUNT, value=1104247064}}, metadata={iceberg-version=Apache Iceberg 1.7.2 (commit c4e11060db443b0f3e5b70d25e7784f5a8991ad2)}}","time":"20260809T09:34:08Z"}
{"level":"info","message":"Thread[public.SegmentMember2_01KZJXQK2P9NFXCEJA7PQQJJV0:50055] 09:34:08.397 [grpc-default-executor-1] INFO io.debezium.server.iceberg.tableoperator.IcebergTableOperator - Successfully committed 13 data files and 13 delete files for thread: public.SegmentMember2_01KZJXQK2P9NFXCEJA7PQQJJV0","time":"20260809T09:34:08Z"}
{"level":"info","message":"Thread[public.SegmentMember2_01KZJXQK2P9NFXCEJA7PQQJJV0:50055] 09:34:08.397 [grpc-default-executor-1] INFO io.debezium.server.iceberg.rpc.OlakeRowsIngester - [Thread-34-2951203554972590] Total time taken: 2872 ms","time":"20260809T09:34:08Z"}
{"level":"debug","time":"20260809T09:34:08Z","message":"Thread[public.SegmentMember2_01KZJXQK2P9NFXCEJA7PQQJJV0]: Sent commit message: [Thread-34-2951203554972590] Successfully committed data for thread public.SegmentMember2_01KZJXQK2P9NFXCEJA7PQQJJV0"}
{"level":"info","time":"2026-08-09T09:34:08Z","message":"Thread[public.SegmentMember2_01KZJXQK2P9NFXCEJA7PQQJJV0]: shutting down Iceberg server on port 50055"}
{"level":"info","time":"2026-08-09T09:34:08Z","message":"Sync completed, wait 5 seconds cleanup in progress..."}
{"level":"fatal","time":"2026-08-09T09:34:13Z","message":"error occurred while reading records: error occurred while waiting for connections: failed to insert cdc record of stream public.CallLog, insert func error: %!s(), thread error: failed to flush data while closing: failed to write records: failed to send batch: rpc error: code = ResourceExhausted desc = gRPC message exceeds maximum size 1073741824: 1359278013"}
Sync broke the first time with this error and all the subsequent syncs are breaking with this error
Is there a way to increase the limit?
For context this column contains a lot of huge text dumps on our postgres instance, maybe that’s why it’s happening?

πŸ‘€ Saksham samarth
πŸ‘ Saksham samarth
10 replies
Saksham samarth
2026-08-09 12:22:03

@Nitish Gupta Thanks for raising the issue ,we will get back to you in soon regarding this issue.

Nitish Gupta
2026-08-09 12:37:00

Full logs of a new run that happened just now

Saksham samarth
2026-08-09 12:37:53

@Nitish Gupta Thanks for the full logs can you also confirm which deployment mode you are currently using k8s ,docker or CLI ?

Nitish Gupta
2026-08-09 12:38:01

docker

πŸ‘ Saksham samarth
Saksham samarth
2026-08-09 12:40:04

@Nitish Gupta could you please let us know whether this is a high priority blocker for your use case with OLake? This will help us prioritize it appropriately. Thanks

Nitish Gupta
2026-08-09 12:41:08

Yes it’s a production table that had been running fine for the last 3-4 months, now I had to stop the sync from Olake leaving us with stale data at the source and we’d have to run slow queries on postgres until this is resolved

Saksham samarth
2026-08-09 12:46:18

@Nitish Gupta Sure, we’ll get back to you as soon as possible. Sorry for the inconvenience.

Saksham samarth
2026-08-09 14:33:55

Hey @Nitish Gupta, the current gRPC request limit in OLake is 1 GB, and 10K rows from the CallLog table are exceeding that limit. As a quick fix, could you please turn off this table or any large columns associated with it for now?

Saksham samarth
2026-08-10 08:40:26

Hey @Nitish Gupta, we've picked up this issue internally and will fix it soon.

Saksham samarth
2026-08-11 08:29:27

Hey @Nitish Gupta, we’ve included a patch for this issue in the latest OLake version, v0.9.1. Could you please try it out and let us know if the issue is resolved for you?

❀️ Ankit Sharma
Sandeep Singh
2026-08-10 09:10:43

Hey team,
Had few questions regarding the new 0.9.0 release.

We have created iceberg tables using github.com/datazip-inc/olake/releases#… 0.8.2

I noticed the new release github.com/datazip-inc/olake/releases#… 0.9.0
bumps the apache iceberg version from 1.7.2 to 1.10.2

Question:

  • Will this change the existing tables? ex. if i am running cdc to export as iceberg table on 0.8.2 then if i upgrade the driver to 0.9.0, will the new data be written in 1.10.2 ?

πŸ‘€ Saksham samarth
3 replies
VIKASH CHOUDHARY
2026-08-10 09:14:25

hey @Sandeep Singh, existing tables are untouched Iceberg library version and table format version are different things: 1.10.2 is the library, and OLake still pins format-version=2 at table creation

VIKASH CHOUDHARY
2026-08-10 09:19:00

Existing tables will remain backward compatible

Sandeep Singh
2026-08-10 09:25:32

understaood, read more on this and clear now

Grayson Williams
2026-08-10 21:46:09

hi all, I'm running OLake on an AWS EKS cluster. As of today, I've started getting errors on our Postgres sources as follows:

failed to validate cdc configuration for slot cdc_user_olake_replication_slot: no record found
This is true for existing Postgres sources as well as new ones, only with CDC. Does anyone have any idea what might cause this?

2 replies
shubham
2026-08-11 02:26:59

@Grayson Williams

  1. Whats the source version of existing sync and new ones? You can find it by editing source. Also did you make any recent changes?

  2. You have your replication_slot in place right? Its not deleted or being reused across multiple sources?

Saksham samarth
2026-08-11 06:00:39

@Grayson Williams can you please share your entire logs ,you can find them on Job Logs & History section ?