Component

Object store service

ObjectStoreService wraps repository-backed BlobStoreRepository instances and exposes typed containers for shard data, translogs, cluster state, and cleanup.

Repository-backed startup

On start, the service creates a non-project repository from stateless object-store settings, starts it, and releases upload permits. In multi-project mode, additional project object stores are applied from cluster state.

Repository repository = repositoriesService.createNonProjectRepository(getRepositoryMetadata(settings));
this.objectStore = (BlobStoreRepository) repository;
this.objectStore.start();
this.permits.release(UPLOAD_PERMITS);
Upload entry points

Indexing code does not write blobs directly. Translog files and batched compound commits are enqueued as object-store tasks, which keeps backpressure and retry behavior centralized.

public void uploadTranslogFile(String fileName, BytesReference reference, ActionListener<Void> listener) {
    enqueueTask(listener, uploadTranslogTaskRunner, l -> new TranslogFileUploadTask(fileName, reference, l));
}

public void uploadBatchedCompoundCommitFile(...) {
    enqueueTask(listener, uploadTaskRunner, l -> new BatchedCommitFileUploadTask(...));
}
Blob namespace

The service exposes different containers for different data classes. The key prefixes make the object store the durable boundary between node-local runtime state and cluster state that survives node replacement.

  • indices/ and per-index containers hold shard commit files.
  • nodes/<ephemeral-id>/translog holds replicated node translog files.
  • cluster_state/ holds stateless coordination and persisted metadata files.
  • Delete queues clean translog and commit blobs asynchronously after retention rules say they are safe.