Reject a topology submission that lists a blob key which is not a dependency blob key - #9012
Merged
Merged
Conversation
Contributor
|
Disclaimer: this comment was generated with the help of an LLM. Minor nit: |
reiabreu
approved these changes
Aug 23, 2026
rzo1
force-pushed
the
fix/validate-dependency-blob-keys
branch
from
August 24, 2026 08:19
317b35f to
3bbf1ac
Compare
rzo1
force-pushed
the
fix/validate-dependency-blob-keys
branch
from
August 24, 2026 08:55
3bbf1ac to
abafd63
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
StormTopology.dependency_jarsanddependency_artifactsare filled in by the client and nothing on the submit path checks them. NotvalidateTopologyName,ConfigValidation.validateTopoConf,DefaultTopologyValidator.validate,validateTopologyWorkerMaxHeapSizeConfigs,Utils.validateTopologyBlobStoreMap,validateTopologySize,StormCommon.validateStructureornormalizeTopology. Nimbus then acts on whatever they contain: it deletes those keys during cleanup, and on gaining leadership it compares them against the blobstore.LeaderListenerCallbackcomputesactiveTopologyDependencies - blobStore.listKeys()and surrenders leadership when the difference is not empty. One dependency key that does not exist, on one active topology, makes every Nimbus win leadership, surrender and re-queue indefinitely, so the cluster does no scheduling, no cleanup and accepts no submissions.Submission now requires every entry to carry the
dep-prefix and to exist in the blobstore. Existence is checked withblobStore.getBlobMeta(key, subject)as the submitting subject, the same wayUtils.validateTopologyBlobStoreMapdoes twenty lines below. A key listed twice is looked up once.StormSubmitteruploads the blobs, then sets the fields, then submits, andDependencyUploaderreturns a key only after the blob is committed, so a legitimate submission always finds its blobs present. On a replicated blobstoregetBlobMetafalls through tocheckForBlobOrDownload, so the lookup also pulls a blob that is missing locally.BLOB_DEPENDENCIES_PREFIXbecomes public and gains anisDependencyBlobKeypredicate so the producer and the check use one definition.