Skip to content
Merged
Show file tree
Hide file tree
Changes from 49 commits
Commits
Show all changes
54 commits
Select commit Hold shift + click to select a range
565bc64
feat: adding fusion releasor and kind cluster setup
hash-data Feb 11, 2026
4c014ee
fix: makefile cluster name
hash-data Feb 11, 2026
809e73b
chore: testing new release after change in postgres init
hash-data Feb 14, 2026
c26cc23
Merge branch 'master' of https://github.com/datazip-inc/olake-amoro i…
hash-data Feb 14, 2026
216e3cf
chore: branch tag
hash-data Feb 14, 2026
8b4a6c2
voila: working perfectly
hash-data Feb 14, 2026
c693d2b
fix: upgrading version of java scala and spark
hash-data Mar 5, 2026
40aa4ad
chore: add licence comments
hash-data Mar 5, 2026
731d88f
chore: changes asked by Badal and some licence updates
hash-data Mar 5, 2026
1b2af45
chore: try building from org secrets
hash-data Mar 5, 2026
a3fb3a7
Merge branch 'staging' of https://github.com/datazip-inc/olake-amoro …
hash-data Mar 5, 2026
cafdf1f
chore: updating licence text
hash-data Mar 5, 2026
b4b0ae9
chore: update regex
hash-data Mar 5, 2026
662354a
feat: debug mode and major interval configurations (#13)
hash-data Mar 12, 2026
ae65e72
chore: release dev-v2 and header check
hash-data Mar 12, 2026
49e6041
fix: licence and build image
hash-data Mar 12, 2026
9a04ea3
chore: remove image push
hash-data Mar 12, 2026
b1cef9c
chore: build correct images
hash-data Mar 13, 2026
2980bb8
chore: removing build tag, prev commit fixed all terminal and optimiz…
hash-data Mar 13, 2026
b742973
feat: logs API
badalprasadsingh Mar 13, 2026
04612ee
fix: minor
badalprasadsingh Mar 13, 2026
6e630a0
use optimizer-spark/log4j2 for routing into desired log files
badalprasadsingh Mar 17, 2026
6844dce
add modification header
badalprasadsingh Mar 17, 2026
3f2b6ac
add download log APIs
badalprasadsingh Mar 17, 2026
55b56d6
fix: minor
badalprasadsingh Mar 17, 2026
17fddfa
feat: migrated interval to cron based configuration
hash-data Mar 20, 2026
d96c433
fix: cleaning disabled + skip snapshot refresh for disabled tables
hash-data Mar 20, 2026
714e8f0
chore: some spotless fixes
hash-data Mar 20, 2026
31cf19a
chore: remove comments and update them
hash-data Mar 21, 2026
953f295
fix: added fix for parquet decoding error (#17)
shubham19may Mar 21, 2026
d701c83
Merge branch 'feat/fusion-releaser' of https://github.com/datazip-inc…
hash-data Mar 21, 2026
82b78a0
Merge branch 'staging' of https://github.com/datazip-inc/olake-fusion…
hash-data Mar 23, 2026
102432b
chore: fixing spotless and header check
hash-data Mar 24, 2026
7c156b8
minor
badalprasadsingh Mar 24, 2026
190c884
chore: rm kind folder
hash-data Mar 25, 2026
c0abade
merge
badalprasadsingh Mar 26, 2026
4d7ed7e
add header check
badalprasadsingh Mar 27, 2026
829c4d0
header check
badalprasadsingh Mar 27, 2026
50ddfd0
remove kind
badalprasadsingh Mar 27, 2026
a13e884
minor
badalprasadsingh Mar 27, 2026
24c0b73
chore: fixing as per discussion, we are not handling edge case of mid…
hash-data Mar 29, 2026
9d44a45
merge
badalprasadsingh Mar 30, 2026
a5c2ab5
add persistent storage path in env
badalprasadsingh Mar 30, 2026
ba75ba5
fix: minor
badalprasadsingh Mar 31, 2026
6a87d5c
chore: update according to some comments and improvements
hash-data Mar 31, 2026
b533eb8
chore: releasing image for current one
hash-data Mar 31, 2026
88519b9
chore: adding spotless changes
hash-data Mar 31, 2026
71e0fb6
chore: remove image creation one
hash-data Mar 31, 2026
ad5952e
Merge branch 'feat/interval-to-cron' into feat/logs-api
badalprasadsingh Mar 31, 2026
1e9000b
merge
badalprasadsingh Apr 7, 2026
1c22bf6
fix: minor
badalprasadsingh Apr 7, 2026
f88bc26
fix: minor
badalprasadsingh Apr 7, 2026
036821e
fix: remove unnecessary line + remove amoro logs mounting
badalprasadsingh Apr 7, 2026
9d2ae3f
requirement by github ci
badalprasadsingh Apr 7, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions .github/workflows/docker-images.yml
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@
# Modified by Datazip Inc. in 2026


# Build and publish Docker images. Triggered by push (dev-v3) or workflow_call with tag (e.g. release).
# Build and publish Docker images. Triggered by push (dev-v5) or workflow_call with tag (e.g. release).

name: Publish Docker Image

Expand Down Expand Up @@ -66,7 +66,7 @@ jobs:
- name: Set Docker tags
id: meta
run: |
VERSION_TAG="${{ github.event_name == 'workflow_call' && inputs.tag || 'dev-v3' }}"
VERSION_TAG="${{ github.event_name == 'workflow_call' && inputs.tag || 'dev-v5' }}"
if [ "${{ github.ref }}" = "refs/heads/master" ]; then
case "${VERSION_TAG}" in v*) ;; *) echo "::error::On master branch, version tag must start with 'v' (e.g. v1.0.0). Got: ${VERSION_TAG}"; exit 1 ;; esac
echo "tags=olakego/fusion:latest,olakego/fusion:${VERSION_TAG}" >> $GITHUB_OUTPUT
Expand Down Expand Up @@ -122,7 +122,7 @@ jobs:
- name: Set Docker tags
id: meta
run: |
VERSION_TAG="${{ github.event_name == 'workflow_call' && inputs.tag || 'dev-v3' }}"
VERSION_TAG="${{ github.event_name == 'workflow_call' && inputs.tag || 'dev-v5' }}"
if [ "${{ github.ref }}" = "refs/heads/master" ]; then
case "${VERSION_TAG}" in v*) ;; *) echo "::error::On master branch, version tag must start with 'v' (e.g. v1.0.0). Got: ${VERSION_TAG}"; exit 1 ;; esac
echo "tags=olakego/fusion-spark:latest,olakego/fusion-spark:${VERSION_TAG}" >> $GITHUB_OUTPUT
Expand Down
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@ spark/spark-warehouse/

# vscode/eclipse files
.vscode/
.vscode/
.classpath
.project
bin/
Expand Down
2 changes: 1 addition & 1 deletion .vscode/launch.json
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@
"vmArgs": "-Dfile.encoding=UTF-8 -Darrow.memory.allocator=unsafe -XX:+UseZGC -XX:CompileCommand=exclude,io/netty/buffer/PoolChunkList.allocate -XX:CompileCommand=exclude,io/netty/buffer/PoolArena.allocate --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.lang.invoke=ALL-UNNAMED --add-opens=java.base/java.lang.reflect=ALL-UNNAMED --add-opens=java.base/java.io=ALL-UNNAMED --add-opens=java.base/java.net=ALL-UNNAMED --add-opens=java.base/java.nio=ALL-UNNAMED --add-opens=java.base/java.util=ALL-UNNAMED --add-opens=java.base/java.util.concurrent=ALL-UNNAMED --add-opens=java.base/java.util.concurrent.atomic=ALL-UNNAMED --add-opens=java.base/sun.nio.ch=ALL-UNNAMED --add-opens=java.base/sun.nio.cs=ALL-UNNAMED --add-opens=java.base/sun.security.action=ALL-UNNAMED --add-opens=java.base/sun.util.calendar=ALL-UNNAMED",
"env": {
"AMORO_HOME": "${workspaceFolder}/dist/src/main/amoro-bin",
"AMORO_CONF_DIR": "${workspaceFolder}/docker/kind",
"AMORO_CONF_DIR": "${workspaceFolder}/local-test",
"CONSOLE_LOG_LEVEL": "info",
"OPTIMIZER_JAVA_OPTS": "-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5006",
"AMS_SERVER__EXPOSE__HOST": "127.0.0.1",
Expand Down
4 changes: 3 additions & 1 deletion Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@

COMPOSE_DIR := local-test
KIND_CLUSTER := fusion-cluster
AMORO_LOG_DIR ?= $(CURDIR)/docker/kind/amoro-logs
DIST_TAR := $(CURDIR)/dist/target/apache-amoro-0.9-SNAPSHOT-bin.tar.gz
RUNTIME_HOME := $(CURDIR)/dist/target/amoro-0.9-SNAPSHOT
BIN_HOME := $(CURDIR)/dist/src/main/amoro-bin
Expand Down Expand Up @@ -118,7 +119,8 @@ stop-deps:

start-fusion-docker:
@echo "Starting Fusion (Kind cluster + all services)..."
@docker compose -f $(COMPOSE_DIR)/docker-compose.yml --profile prod up -d
@mkdir -p "$(AMORO_LOG_DIR)"
@AMORO_LOG_DIR="$(AMORO_LOG_DIR)" docker compose -f $(COMPOSE_DIR)/docker-compose.yml --profile prod up -d
@kind export kubeconfig --name $(KIND_CLUSTER) 2>/dev/null

clean-fusion-docker:
Expand Down
5 changes: 5 additions & 0 deletions amoro-ams/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -455,6 +455,11 @@
<version>${pagehelper.version}</version>
</dependency>

<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-compress</artifactId>
</dependency>

<dependency>
<groupId>org.apache.iceberg</groupId>
<artifactId>iceberg-data</artifactId>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,8 @@
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
* Modified by Datazip Inc. in 2026
*/

package org.apache.amoro.server;
Expand Down Expand Up @@ -95,7 +97,7 @@ public class AmoroManagementConf {
public static final ConfigOption<Duration> REFRESH_EXTERNAL_CATALOGS_INTERVAL =
ConfigOptions.key("refresh-external-catalogs.interval")
.durationType()
.defaultValue(Duration.ofMinutes(3))
.defaultValue(Duration.ofMinutes(1))
.withDescription("Interval to refresh the external catalog.");

public static final ConfigOption<Integer> REFRESH_EXTERNAL_CATALOGS_THREAD_COUNT =
Expand All @@ -111,11 +113,12 @@ public class AmoroManagementConf {
.defaultValue(1000000)
.withDescription("The queue size of the executors of the external catalog explorer.");

public static final ConfigOption<Boolean> EXPIRE_SNAPSHOTS_ENABLED =
public static final ConfigOption<Boolean>
EXPIRE_SNAPSHOTS_ENABLED = // TODO: will be enabled with cleaning feature
ConfigOptions.key("expire-snapshots.enabled")
.booleanType()
.defaultValue(true)
.withDescription("Enable snapshots expiring.");
.booleanType()
.defaultValue(false)
.withDescription("Enable snapshots expiring.");

public static final ConfigOption<Integer> EXPIRE_SNAPSHOTS_THREAD_COUNT =
ConfigOptions.key("expire-snapshots.thread-count")
Expand All @@ -132,7 +135,7 @@ public class AmoroManagementConf {
public static final ConfigOption<Boolean> CLEAN_ORPHAN_FILES_ENABLED =
ConfigOptions.key("clean-orphan-files.enabled")
.booleanType()
.defaultValue(true)
.defaultValue(false) // TODO: will be enabled with cleaning feature
.withDescription("Enable orphan files cleaning.");

public static final ConfigOption<Integer> CLEAN_ORPHAN_FILES_THREAD_COUNT =
Expand All @@ -150,7 +153,7 @@ public class AmoroManagementConf {
public static final ConfigOption<Boolean> CLEAN_DANGLING_DELETE_FILES_ENABLED =
ConfigOptions.key("clean-dangling-delete-files.enabled")
.booleanType()
.defaultValue(true)
.defaultValue(false) // TODO: will be enabled with cleaning feature
.withDescription("Enable dangling delete files cleaning.");

public static final ConfigOption<Integer> CLEAN_DANGLING_DELETE_FILES_THREAD_COUNT =
Expand Down Expand Up @@ -186,7 +189,7 @@ public class AmoroManagementConf {
public static final ConfigOption<Boolean> AUTO_CREATE_TAGS_ENABLED =
ConfigOptions.key("auto-create-tags.enabled")
.booleanType()
.defaultValue(true)
.defaultValue(false) // TODO: will be enabled with cleaning feature
.withDescription("Enable creating tags.");

public static final ConfigOption<Integer> AUTO_CREATE_TAGS_THREAD_COUNT =
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,8 @@
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
* Modified by Datazip Inc. in 2026
*/

package org.apache.amoro.server;
Expand Down Expand Up @@ -369,7 +371,12 @@ private class TableRuntimeHandlerImpl extends RuntimeHandlerChain {
@Override
public void handleStatusChanged(TableRuntime tableRuntime, OptimizingStatus originalStatus) {
DefaultTableRuntime defaultTableRuntime = (DefaultTableRuntime) tableRuntime;
if (!defaultTableRuntime.getOptimizingStatus().isProcessing()) {
OptimizingStatus newStatus = defaultTableRuntime.getOptimizingStatus();
// Only re-queue when the table becomes available for the next planning cycle (IDLE after
// completing/skipping work) or has new pending data (PENDING). Skip the IDLE→PLANNING
// transition to avoid a redundant "Bind queue" log and unnecessary scheduler churn while
// planning is already in flight.
if (newStatus == OptimizingStatus.IDLE || newStatus == OptimizingStatus.PENDING) {
getOptionalQueueByGroup(defaultTableRuntime.getGroupName())
.ifPresent(q -> q.refreshTable(defaultTableRuntime));
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,8 @@
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
* Modified by Datazip Inc. in 2026
*/

package org.apache.amoro.server.dashboard;
Expand Down Expand Up @@ -43,6 +45,7 @@
import org.apache.amoro.server.dashboard.controller.ApiTokenController;
import org.apache.amoro.server.dashboard.controller.CatalogController;
import org.apache.amoro.server.dashboard.controller.HealthCheckController;
import org.apache.amoro.server.dashboard.controller.LogController;
import org.apache.amoro.server.dashboard.controller.LoginController;
import org.apache.amoro.server.dashboard.controller.OptimizerController;
import org.apache.amoro.server.dashboard.controller.OptimizerGroupController;
Expand Down Expand Up @@ -90,6 +93,7 @@ public class DashboardServer {
private final VersionController versionController;
private final OverviewController overviewController;
private final ApiTokenController apiTokenController;
private final LogController logController;

private final PasswdAuthenticationProvider basicAuthProvider;
private final TokenAuthenticationProvider jwtAuthProvider;
Expand Down Expand Up @@ -120,6 +124,7 @@ public DashboardServer(
this.overviewController = new OverviewController(manager);
APITokenManager apiTokenManager = new APITokenManager();
this.apiTokenController = new ApiTokenController(apiTokenManager);
this.logController = new LogController();

String authType = serviceConfig.get(AmoroManagementConf.HTTP_SERVER_REST_AUTH_TYPE);
this.basicAuthProvider =
Expand All @@ -138,6 +143,7 @@ public DashboardServer(
}

private volatile String indexHtml = null;

// read index.html content
public String getIndexFileContent() {
if (indexHtml == null) {
Expand Down Expand Up @@ -396,6 +402,15 @@ private EndpointGroup apiGroup() {
post("/calculate/signature", apiTokenController::calculateSignature);
post("/calculate/encryptString", apiTokenController::getEncryptStringFromQueryParam);
});

// logs api
path(
"/logs",
() -> {
get("/process/{processId}", logController::getProcessLogs);
get("/process/{processId}/download", logController::downloadProcessLogs);
get("/process/{processId}/file/{fileId}", logController::downloadLogFile);
});
};
}

Expand Down
Loading
Loading