Federated Repositories


📘

Note

This feature is supported with Enterprise X and Enterprise+ licenses with Artifactory versions 7.18.3 or later.

Working with Federated Repositories

Federated repositories enable enterprises that operate across multiple sites to maintain a single source of truth for their binaries. A Federated repository functions similarly to a local repository on the local JPD but is grouped logically with other Federated members located on remote JPDs to create a Federation. Artifacts and metadata in one JFrog Platform Deployment (JPD) are mirrored to the Federated repositories in the remote JPDs that together comprise the Federation. Changes made to an artifact on one Federation member are replicated asynchronously to the other members.

Once you have created a Federation, changes made to artifacts on one member of the Federation will be replicated asynchronously to the other Federated members. The Federated repository configuration is also aligned across all members of the Federation.

For example, if Federated repository A in "JPD A" and Federated repository B in "JPD B" are members of the same Federation, deploying a file to Federated Repository A in "JPD A", will trigger a copy of the file action to the Federated Repository B in "JPD B".

Similarly, deploying a file to Federated Repository B in "JPD B", will trigger a copy of the file action to the Federated Repository A in "JPD A". The configuration changes are also synchronized based on the latest update (e.g. latest update to the configuration is propagated to all members of the Federation).

❗️

Important

A file that is replicated from one Federation member (the source) to a different Federation member (the target) cannot be downloaded by users from the target member until it receives the metadata.

The arrival of the metadata can be verified by seeing the file displayed in the tree browser or the database of the target member.

Starting from version 7.74, Cloud customers can confirm the file's arrival by looking for the following log message:

"Finished the handle mirror event for repo <repo_key> and message: <message>"

Use Cases

Federated repositories provide Enterprise organizations divided across multiple geographical sites with a single source of truth for their binaries as if they were one seamless unit. They support the following use cases:

  • Distributed development teams
  • Remote production environment
  • Increased artifact availability in a multi-site environment

Defining Characteristics

Federated repositories have the following characteristics:

  • Federated repositories use a persistent queue to ensure that events are maintained even in the event of a system failure or restart.
  • Metadata events are updated asynchronously among Federated repositories. However, because of the persistent queue, the repository Federation mechanism ensures that all events will be synchronized among all Federation members. For example, an event might not be sent immediately to a different Federation member due to a server failure or network delays, but the system ensures that the event will be sent eventually.
  • There is no dependency among Federation members, nor is there member priority when synchronizing the metadata. This means that a member which is slow to respond or experiencing heavy traffic will not impact the other members.
  • When the same file is sent from two locations simultaneously, conflict resolution is performed based on timestamps where the last event received overrides previous events. This is why clock synchronization is critical to the proper functioning of the Federation (see Setup Prerequisites for Federated Repositories).

Synchronized Metadata

Federated repositories synchronize the following metadata among members:

Folders

Files

  • length (the size of the folder in bytes)
  • properties
  • checksum
  • properties
  • uploadedBy (see note below)
  • lastFileModified (see note below)
  • deploymentDate (see note below)
📘

Note

Synchronization of the metadata that was introduced as part of the 7.90.1 release (uploadedBy, lastFileModified, deploymentDate) is controlled by the system property, artifactory.federated.mirror.events.upload.info.propagate.enabled. By default, this flag is set to false. Set this flag to true on both the source and target JPDs to synchronize this metadata to other members.

Settings that are not Synchronized

The following repository configuration settings are not synchronized among Federation members:

  • proxy
  • maxNumberOfThreads
  • modificationDate
  • blackedOut
  • repoLayout
  • key
  • primaryKeyPairDescriptor
  • secondaryKeyPairDescriptor
  • xrayConfig
  • cdnRedirectConfig
  • propertySets
  • cdnRedirectRepo
  • downloadRedirect

For more information about these settings, see Repository Configuration JSON.

Federated Topology

Federated repositories employ a topology with two separate but integrated mechanisms, whereby artifact metadata is replicated continuously but separately from the binary content. This is done to enable fast synchronization of the metadata, which is replicated rapidly in bulk, while the binary content is brought asynchronously using a separate mechanism based on workers. Priority can always be given to specific binaries on user demand as required.

Having the metadata replicated quickly is critical because file properties cannot be uploaded before the file itself is uploaded. This is especially true when working with Docker manifests, which cannot be uploaded before the layers listed in the manifest are uploaded.

Dividing the federation of the metadata and the binaries into two separate mechanisms also provides a solution with excellent scalability.

Repository_Federation_Topology_01.png

Artifactory Federation Service

To meet the growing needs of customers, JFrog released the standalone Artifactory Federation Service in Q3 2024 for customers in Cloud environments (support for Self-hosted environments was introduced in January 2025) to ensure the timely synchronization of huge volumes of artifact metadata between customer sites.

Customer Benefits

The Artifactory Federation Service offers multiple benefits, including:

  • Scalability: The service is designed from the ground up to grow as the needs of our customers grow.
  • Resource separation: Federated repositories employ a topology with two separate but integrated mechanisms, whereby artifact metadata is replicated continuously but separately from the binary content. This enables fast synchronization of the metadata, which is replicated rapidly in bulk, while the binary content is brought asynchronously using a separate mechanism based on workers. Separate mechanisms also enable checksum validation on binaries before they are synchronized, which reduces traffic costs by preventing the copying of files that already exist on the target.
  • Federation monitoring: A new dashboard enables administrators to quickly understand the health of their organization's repository Federations at a glance. For more information, see Monitor Federated Repositories using the Dashboard.
  • Prioritization: Users can assign high priority to a limited number of repositories to ensure they receive priority access to system resources. For more information, see View the Status of All Repository Federations.
  • Automatic Federation recovery: The service features an auto-healing mechanism that can identify synchronization problems between members due to an exhausted queue (a queue that has exceeded the maximum number of attempts to send metadata events to other members), reset the failed events, and retry synchronization. This capability is particularly useful in the event a Full Sync operation is interrupted by a restart of one of the Artifactory instances that host a Federation member.

Migrate to the Artifactory Federation Service

❗️

Important

Self-hosted customers who wish to become early adopters of this service are asked to contact JFrog so that we can evaluate your needs and guide you through the migration process.

Please note that the current version of the Artifactory Federation Service does not support the use of self-signed certificates or certificates signed by a custom Certificate Authority (CA). Self-hosted customers must use certificates signed by a trusted CA when setting up their Federation.

Self-hosted customers can use the JFrog CLI to migrate their repository Federations (including configuration, states, and events) from the legacy Federation service in Artifactory to the standalone Artifactory Federation Service (RTFS) that was introduced in release 7.104.5. This topic also describes how to return (rollback) to the legacy service, if required.

Prerequisite

You must activate the Artifactory Federation Service before performing migration. For more information, see Install the Artifactory Federation Service.

📘

Note

Verify that no Full Sync operations are in progress before starting migration. This can be done using the Get Federation Sync State REST API. For example, issue the following command to list the repositories currently running a Full Sync operation:

jf rt curl api/federation/state | jq '.[] | select(.status == "FULL_SYNC_RUNNING")'

Install the Plugin

Run the following command to install the migration plugin from the official registry of JFrog CLI plugins:

jf plugin install federation-migrator

This command installs the plugin and the jar of the migration tool, which performs all required operations with one command.

📘

Note

If a previous installation of the plugin exists, we recommend that you remove or uninstall it before running the plugin installer. On rare occasions, the previous installation can cause the plugin installer to fail.

Migration Procedure

Run the following command to execute the migration to the standalone Federation service:

jf federation-migrator migrate_rtfs <base url without /artifactory> <scoped token>

Region command options

Option

Type

Description

-f

--force

boolean

Forces migration without properly processing all queued events. The default value is false.

-p

--parallel

boolean

Enables parallel mode for faster queue migration. The default value is false.

-bs

--batch-size

integer

Sets the batch size for RTFS import operations. The default value is 250 repository configurations.

⚠️

Warning

Increasing the default value may cause performance issues.

-sr

--stateful-run

boolean

Enables a more robust migration for repositories that were not processed during previous runs due to unexpected errors. The default value is false.

📘

Note

This option requires Artifactory 7.117.1 or later.

-rlcp

--rtfs-legacy-context-path

boolean

Uses the legacy context path for RTFS, including the '/artifactory/service' prefix. The default value is false.

📘

Note

This option is required when migrating to RTFS from an Artifactory version prior to 7.111.12 or 7.117.5. For more information, see Breaking Change for Artifactory Federation Service.

HTTP client command options

Option

Type

Description

-hst

--http-socket-timeout-ms

integer

Socket timeout in milliseconds. The default is 180000 (30 min.).

-htc

--http-max-total-connections

integer

Maximum total HTTP client connections. The default is 200.

-hcr

--http-max-connections-per-route

integer

Maximum HTTP client connections per route. The default is 200.

-hpt

--http-connection-pool-ttl-sec

integer

HTTP client connection pool TTL in seconds. The default is 60.

-hrc

--http-retry-count

integer

HTTP client retry count. The default is 5.

-hvm

--http-verbose-mode

boolean

Enables verbose HTTP client mode. The default is false.

Executor command options

Options

Type

Description

-etm

--executor-timeout-min

integer

Executor timeout in minutes. The default is 120.

-et

--executor-threads

integer

Number of executor threads. The default value is 200.

📘

Note

  • The operation can take anywhere from a few seconds to several minutes to complete. You do not need to restart Artifactory after performing the migration.
  • For details about generating a scoped access token, see Generate Scoped Tokens.

Verify Migration Status

Perform the following steps to verify that the migration has succeeded:

  1. Execute the following API: curl -X GET -uadmin:password "http://{{artifactory_url}}/artifactory/api/federation/migration/status"

    If the service has been enabled, this API will return the status of the migration:

    MIGRATION_STARTED
    MIGRATING_EVENTS_TO_RTFS
    MIGRATION_COMPLETED
    COMPLETED_WITH_ERRORS

    If the service has not been enabled, this API returns: Status not configured

  2. Execute the following API to verify that migration has completed: curl -X GET -uadmin:password "http://{{platform_url}}/artifactory/api/federation/rtfs"

    The API will return true if migration has completed successfully.

  3. The new Federation monitoring dashboard should be available in the platform UI. In the Administration module, go to Monitoring > Federation. For more information, see View the Status of All Repository Federations.

Rollback Procedure

Run the following command to return to the legacy Federation service:

jf federation-migrator migrate_rt <base url without /artifactory> <access token>

The rollback command features the same command options as the migration command. For more information, see Migration Procedure.

The migrate_rt command supports the same options as the migration command.

The migration process is designed to prevent inconsistent or "stuck" states. In the rare event that the migration process does not complete as expected, please contact JFrog Support..

📘

Note

The operation can take anywhere from a few seconds to several minutes to complete. You do not need to restart Artifactory after returning to the legacy Federation service.

Tip

For additional information, add --help after each command:

  • jf federation-migrator --help
  • jf federation-migrator migrate_rtfs --help
  • jf federation-migrator migrate_rt --help
📘

Federation over Secure Private Link (Bridge)

You can now configure Repository Federation between SaaS and self-managed environments using JFrog Bridge, without VPN or public exposure. For setup instructions, see Federation with Secure Private Link (Bridge).


📘

Timeline for the Sunset of JFrog Legacy Repository Federation

We are providing advance notice of the planned retirement timeline for Legacy Repository Federation in Self-Hosted environments.

Timeline

January 2026 – Announcement Phase
Sunset plan communicated to customers.

Now through Mid-2027 – Migration Window (18 Months)
Customers are encouraged to begin transitioning to RTFS.

July 2027 – Removal from New Releases
Legacy Federation will no longer be included in newly released Self-Hosted versions.
Previously released versions remain supported according to JFrog standard support policies.


Important Information

Database Requirements

RTFS requires a PostgreSQL database connection. This applies only to the RTFS service itself.
Your main Artifactory installation remains unaffected and continues to support all supported databases.

Implementation Options

  • If your Artifactory already uses PostgreSQL, you may use the same instance.

  • If using a different database, you only need a separate PostgreSQL instance for RTFS. There is no need to migrate your entire Artifactory installation.


Why This Change?

RTFS represents the next generation of repository federation with:

  • Standalone microservice architecture that reduces impact on Artifactory

  • All new federation features (including Unidirectional Sync) developed exclusively for RTFS

  • Default federation service for JFrog SaaS customers

  • Proven stability and performance validated by enterprise customers


Migration Support

The migration from Legacy Federation to RTFS is designed to be seamless:

  • Automatic migration tools ensure configuration and data integrity

  • No downtime required

  • Hybrid mode supported (Legacy and RTFS can coexist during transition)

  • You do not need to migrate all sites simultaneously

  • Full rollback capabilities during the transition window


Note: This sunset applies to Self-Hosted environments only.

For detailed information about RTFS features, migration procedures, and FAQs, please refer to the Artifactory Federation Service documentation.




Setup Prerequisites for Federated Repositories

Setup prerequisites for Federated repositories include:

Artifactory Versions Must be Identical (prior to 7.49.6)

When using a version of Artifactory older than 7.49.6, you must verify that the same Artifactory version is installed in all the Artifactory instances hosting the members to be included in the Federation.

After all instances have been upgraded to Artifactory release 7.49.6, Artifactory includes multi-version support, which enables the members of a Federation to run different versions of Artifactory, even if the version at one site includes configuration features and values that are not supported on the versions running at other sites. Thanks to multi-version support, future upgrades after 7.49.6 can be performed on one site at a time, eliminating the need for simultaneous upgrades across all locations.

For more information, see Multi-Version Support.

JFrog Platform Deployment (JPD) Clocks Must be Synchronized

If the federated repository artifacts are simultaneously updated on two (or more) member federated repositories, the update that is registered last will overwrite the other update(s). Therefore, to ensure consistent, predictable and trackable behavior of the system as a whole, the server clocks of all the machines running Federated members must be synchronized.

Configure Custom Base URL

Configure the Custom Base URL in the Administration module, under General | Settings. The Base URL supports detecting member JFrog Deployments (JPDs) in your organization.

📘

Applies to Self-Hosted Deployment

The Custom Base URL is relevant to Self-Hosted deployments and not applicable in SaaS.

📘

Changing the BaseURL in a Federated Repository Environment

In versions prior to Artifactory 7.55.1, you cannot modify the Base URL if you have Federated repositories set up with remote mirroring. Therefore, you will first need to remove the remote members from the Federation and click Save. This limitation no longer applies in versions 7.55.1 and above. For more information, see Change the Base URL in Federated Repositories.

After changing the base URL, proceed to set up the Federated repositories with the original Federated members. For all the remote members to be populated with new settings, it is recommended to wait for a short period of time between removing the remote members and changing the base URL.

Establish Trust Between the JPDs

You will need to establish trust between the JPDs in your Federated repository. The options for enabling trust depend on whether you have a Cloud or a Self-hosted deployment.

Cloud Customers

JFrog Enterprise/ Enterprise+ SaaS customers:

  • Set up a binding token to create bi-directional trust between the JPDs.

Self-Hosted Customers

Choose from one of the following options:

  • Set up bindings between relevant JPDs: Using binding tokens enables admins to create trust between managed JFrog Platform Deployments (JPDs) once the JPDs have been added to the Mission Control instance, thus simplifying the setup across JPDs.
  • Enable a Circle of Trust: This option is intended for customers who are interested in providing full access to the other JPDs, access which is granted automatically once the Circle of Trust is implemented.
📘

Note

Federated repositories that use binding tokens (i.e., no Circle of Trust) require an enabled Mission Control microservice in their Artifactory since the token is created by Mission Control.

Oracle RAC Support

📘

Note

This section is relevant for customers in Self-Hosted environments running Artifactory release 7.71.16 and later or 7.77.8 or later.

Customers who use Oracle Real Application Clusters (RAC) must configure the following Artifactory system property to support Federated repositories:

artifactory.oracle.node.events.sequence.is.no.cache

Setting this property to true enables a converter that fixes the Oracle node events sequence definition for RAC instances.

Federated Repository Best Practices

Manual Migrations and Full Sync Federated repositories rely on event-based synchronization. If a manual migration process is executed (e.g., moving data at the storage level or using methods not performed through Artifactory APIs), the necessary synchronization events will not be triggered.

Requirement: In such cases, you must execute a Full Sync on the impacted federated repositories once the migration is completed to ensure all members are consistent.

Setting up Federated repositories on JPDs in a multisite environment impacts your organization's network, servers, and databases. It takes careful consideration and planning to configure a Federation that makes efficient use of available resources and provides timely and accurate synchronization across all Federation members.

This is why JFrog recommends building your repository Federations in stages, with thorough evaluations conducted at each stage to verify your infrastructure is configured properly to handle the demands of running repository Federations.

JFrog recommends the following best practices when configuring your JPD for repository Federations:

  • Persisted queue age

    This setting determines the amount of time that events remain in the queue before they are purged. The default value is 3 days. This means that if there is a disconnection between two Federation members that lasts longer than 3 days, the older events are purged and can no longer be synchronized. You need to perform a Full Sync operation to re-establish the Federation, which can take a long time to perform.

    If you increase this value to more than 3 days, it can greatly increase the size of your database table, which in turn increases costs and affects performance (depending on the number of events generated by each site).

    This setting is configured per JPD using the property:

    artifactory.events.log.cleanup.age.of.entries.to.discard.days

    It should be set to the same value for each Federation member.

  • Number of metadata workers

    Artifactory uses an internal mechanism (referred to here as a 'worker') to send metadata events in bulk via parallel threads from the source JPD to other Federation members. Each thread is managed by a worker. Each thread can handle the events for one Federated repository at a time. The default value is calculated based on the number of cores in the CPU.

    In terms of the Federation, the number of threads required is dependent on the number of repositories that are updated at the same time and the frequency of those updates. If many repositories are updated frequently and at the same time, more threads might be required. A sufficiently powerful server (for example, 64-core) should provide sufficient power to manage 20-40 threads.

    To configure the number of metadata workers, set the following property in the artifactory.system.properties file (a restart is required):

    artifactory.persistentQueue.trigger.number.of.threads

    For more information, see Artifactory System Properties.

  • Number of binary import workers

    Artifactory uses an internal mechanism (referred to here as a 'worker') to import binary events from the source JPD to the target Federation members. The default value is 6.

    In terms of the Federation, the number of workers required is dependent on the number of binaries the Federation is expected to handle, their relative size, and the capacity of your network. You need to find the correct balance between the amount of network bandwidth dedicated to importing binaries and the time it will take to import them.

    To configure the number of binary import workers, set the following property in binarystore.xml (under the Federated provider section):

    numberOfRemoteImporters

📘

Note

For more information about binarystore.xml, see Binary Provider under Filestore Confguration.

  • Number of thread executors

    Thread executors (also known as pools), which are located in the target Federation member, enable the metadata events sent from the source Federation member to be uploaded in parallel while maintaining the correct order of the files.

❗️

Important

The number of thread executors should always be equal to or greater than the number of metadata workers, otherwise a bottleneck will result.

To configure the number of thread executors, set the property:

artifactory.federated.mirror.events.bulk.max.pools

For more information, see Configure Federated Repositories for Bulk Mirroring and Parallel Processing.

Tip

In addition to increasing the number of metadata workers and thread executors, you may need to increase the following timeout thresholds above their default values (2 min.) if you expect your Federations to carry heavy loads:

  • artifactory.federated.mirror.events.bulk.executor.poll.timeout.minutes
  • artifactory.federated.mirror.events.bulk.fullSync.executor.wait.timeout.minutes

Increase these values in proportion to the maximum expected load. For more information about these settings, see Configure Federated Repositories for Bulk Mirroring and Parallel Processing.

  • Number of threads for each executor

    This setting determines how many metadata events for a particular repository can be processed in parallel while preserving the correct order (for example, for Docker events this means uploading all layouts followed by all manifests). This number can be increased by adding threads to each thread executor. The default value is 4.

    To configure the number of threads for each executor, set the property:

    artifactory.federated.mirror.events.bulk.threadsPerPool

    For more information, see Configure Federated Repositories for Bulk Mirroring and Parallel Processing.

  • Network infrastructure

    The capabilities of your organization's network are of paramount importance to the optimal functioning of your Federation. The stronger the network connections between the members and the greater the bandwidth, the better the Federation will be able to avoid latency when sending metadata events and binaries from site to site.

Set Up a Federated Repository

A Federated repository can be set up using:

❗️

Important

Verify that you have met all setup prerequisites before proceeding. Self-hosted customers must configure a Custom Base URL. For more information, see Setup Prerequisites for Federated Repositories.

❗️

Important

Only Platform Administrators can set up a Federated repository and add members to the Federation.

Set Up a Federated Repository Using the UI

Setting up a Federated repository is similar to setting up a local repository with the additional step of choosing the repositories on other JPDs that are part of the same Federation.

❗️

Important

Verify that you have met all setup prerequisites before proceeding. Self-hosted customers must configure a Custom Base URL. For more information, see Setup Prerequisites for Federated Repositories.

To set up a Federated repository using the platform UI:

  1. From the Administration module, select Repositories.

  2. Click Create a Repository and select Federated.

    Create_federated_repo.png

  3. In the Select Package Type window, select the package type.

    select_package_type_federated_repo.png

  4. In the Basic tab, configure the basic repository settings. For more information, see Basic Settings for Local Repositories.

❗️

Important

It is mandatory to assign a Repository Key that will be added as the prefix to the Federated repository and displayed on all the sites.


  1. In the Advanced tab, configure additional repository settings as required. For more information, see Advanced Settings for Local Repositories.

  1. In the Federation tab, add members to the Federation by selecting repositories on other JFrog Platform Deployments (JPDs). Click Add Repository.

  1. In the Add Repositories dialog box, add members to the Federation using one of these methods:
  • Deployments: If you have Mission Control installed, the repositories on the remote JPDs will automatically be populated. If the repository with the identical name doesn't exist on the remote JPD, click Create New to duplicate this repository.

  • URL: Manually add a predefined URL path to the repository. If the repository does not exist on the remote JPD, it will be created automatically according to the following syntax:

    <BASE_URL>/artifactory/<repository_name> //For example, http://<ip address>:8082/artifactory/fed117
     
📘

Note

JPDs will appear only if you have set up bindings or established a Circle of Trust.

  1. Click Done. You will be returned to the Federated tab.
  2. Click Create Federated Repository.
📘

Federated Repositories Not Supported for Artifactory Backend Repositories

It is not possible to connect a Terraform Backend repository to a Federated repository. This limitation prevents inconsistencies in the system state, which could lead to unexpected behavior or errors.


Configure Receiving-Only (Unidirectional Sync)

JFrog Unidirectional Sync modifies the default bidirectional behavior of Federated Repositories to create "receiving-only" targets, serving as a more reliable, highly scalable replacement for legacy Push Replication. Its primary value lies in enforcing strict hub-and-spoke architectures with clear ownership, which minimizes storage costs and network traffic by preventing unwanted artifact replication from remote spokes back to the central hub.

Overview

Unidirectional Sync adds a Transmission Mode per federation member:

  • bidirectional (default) — members send and receive.
  • receiver (new) — member is Get-Only within that repository's federation. Outbound federation processing and Full-Sync initiation are skipped for the receiver. Monitoring reflects Receiving Only semantics.

Primary Benefits

  • Governance & Compliance: Keep satellite/third-party sites in a receive-only posture.
  • Operational Simplicity: Use federation's streaming, auto-healing, and observability; avoid job-scheduling overhead of replication.
  • Deterministic Hub-and-Spoke: Enforce Source → Target flows with clear ownership, which reduces the cost of storage and network traffic by preventing unnecessary artifact synchronization from the spoke (Target) back to the hub (Source).

Prerequisites

  • Artifactory Federation Service installed and connected on Source and Target JPDs.
  • Both JPDs should be on the supported versions.
  • Network reachability between JPDs for API + binaries.
  • Admin permissions on Source; minimal required on Target.
  • Tokens/Trust options:
    • Option A (recommended): Service Trust Pairing → issue a receiving-only master token for enforcement.
📘

Note

This option is recommended when the customer needs to assure the target site is not capable of pushing content to the source due to governance or compliance reasons. Since the master token itself is receiving-only, it enforces restrictions across the entire site for the pairing, meaning:

  • The Target JPD's admin cannot build federations that push content back to the Source.
  • All federations built from Source to Target using this pairing will be receiving-only on the Target side.
  • Option B: Regular master token with full permissions — works functionally but does not enforce receiving-only posture at the trust boundary.
📘

Note

This option is typically used when the customer wants the flexibility to establish both bidirectional and unidirectional federations between the Source and Target JPDs. The unidirectional flow is usually selected on a per-repository basis (by setting the member mode to receiver) mainly to save on storage and network traffic. In this case, there is no site-level enforcement that the target members are receiving-only; enforcement relies entirely on the repository configuration.

Steps

⚠️

Complete All Steps

Unidirectional Federation setup requires completing Steps 1 through 3 in sequence. Each step builds on the previous one. Do not stop after Step 1—federation will not function correctly until you complete the health check in Step 3B.

Setup Workflow Overview

StepActionOutcome
1Establish TrustReceiving-only master token created
2Create/Update RepositoryFederated repository with receiver member configured
3AInitial SyncArtifacts synchronized from Source to Target
3BValidate HealthConfirm federation is operational

Step 1 — Establish Receiving-Only Trust (Service Trust Pairing)

📘

Note

Skip to Step 2 only if you have chosen Option B (regular master token with full permissions). For governance and compliance use cases, complete this step using Option A.

1A. Generate a read-permission pairing token on the Source JPD

POST {{jpd_url}}/artifactory/api/v1/service_trust/pairing/federated-repo/r
Authorization: Bearer <admin_or_scoped_token>

Response (example):

{ "pairing_token": "<PAIRING_TOKEN>", "expires_in": 300 }

1B. Exchange the pairing token on the Target JPD to obtain a receiving-only master token

PUT {{jpd_url}}/artifactory/api/v1/service_trust/pairing/federated-repo/r
Authorization: Bearer <admin_or_scoped_token>
Content-Type: application/json

{ "pairing_token": "<PAIRING_TOKEN>" }

Alternative (equivalent when pairing token was created with /r):

PUT {{jpd_url}}/artifactory/api/v1/service_trust/pairing/federated-repo/*

Outcome: Target now holds a receiving-only master token suitable for creating Receiver-restricted membership with the Source.

Step 2 — Create (or Update) the Federated Repository on the Source

2A. Create a federated repository with the Target as Receiver

PUT {{jpd_url}}/artifactory/api/repositories/{{source_repo_name}}
Content-Type: application/json
Authorization: Bearer <admin_or_scoped_token>

{
  "rclass": "federated",
  "packageType": "generic",
  "members": [
    {
      "url": "{{memberUrl}}/artifactory/{{target_repo_name}}",
      "mode": "receiver"
    }
  ]
}

2B. Update an existing federated repository to set Receiver mode

POST {{jpd_url}}/artifactory/api/repositories/{{source_repo_name}}
Content-Type: application/json
Authorization: Bearer <admin_or_scoped_token>

{
  "members": [
    {
      "url": "{{memberUrl}}/artifactory/{{target_repo_name}}",
      "mode": "receiver"
    }
  ]
}

Step 3 — Initial Synchronization & Verify

3A. Automatic Full Sync on create/update

On repository create/update, Artifactory triggers a Full Sync automatically from the Source to the Target (receiver). No manual Full Sync call is required for initial synchronization. The reverse direction (Target → Source) is not possible in receiver mode.

3B. Validate health — Required

👍

Tip

This step confirms your Unidirectional Federation is fully operational. Do not consider setup complete until you verify these health checks pass.

Run the following health check APIs:

Check repository connection state:

GET {{jpd_url}}/artifactory/api/federation/status/connectionStates/{{source_repo_name}}

Check JPD-wide federation summary:

GET {{jpd_url}}/artifactory/api/federation/status/stateSummary

Expected Results

CheckExpected ValueStatus
Target member modeReceiving_Only
Connection statusHEALTHY
Outbound processingSkipped (as expected for receiver)

If any checks fail, review the Troubleshooting section before proceeding.

Set Up Unidirectional Sync Using the Platform UI

Creating a New Federated Repository with Receiver Members

  1. Navigate to Administration → Repositories → Create a Repository → Federated
  2. Fill in the Basic tab with required fields (Repository Key, Package Type)
  3. In the Federation Management section:
    • The current repository (local) will be displayed
    • Click Add Repository button to add federation members
    • In the modal, enter the target member URL in the format: {platform_url}/artifactory/{repo_key}
    • Click Done to add the member
  4. For each added member, a "Receiving Only" checkbox appears:
    • Check this box to set the member to receiver mode (unidirectional sync)
      • A tooltip explains: "When selected, the repo will receive events & binaries from other Federation members, but cannot send. This option maintains a central source of truth while enabling access to artifacts in distributed environments."
  5. Click Create to save the repository

Updating an Existing Federated Repository to Set Receiver Mode

  1. Navigate to Administration → Repositories → Repositories
  2. Find and click on the federated repository you want to modify
  3. Scroll to the Federation Management section
  4. For each linked member (non-current repository), locate the "Receiving Only" checkbox:
    • Check the checkbox to set the member to receiver mode
    • Uncheck to revert to bidirectional mode
  5. Click Save to apply changes


Set Up a Federated Repository Using the REST API

❗️

Important

Verify that you have met all setup prerequisites before proceeding. Self-hosted customers must configure a Custom Base URL. For more information, see Setup Prerequisites for Federated Repositories.

The dedicated Federated Repository Configuration JSON file is application/vnd.org.jfrog.artifactory.repositories.FederatedRepositoryConfiguration+json

The following repository REST APIs support working with Federated repositories:

📘

Note

When working inside a specific project, the Federated repositories that comprise the Federation must all share the same project key.

Convert a Local Repository to a Federated Repository

Local repositories can be converted to Federated repositories using one of the following methods:

Convert a Local Repository to a Federated Repository - Platform UI

You can convert an existing local repository to a Federated repository directly from its listing in the Local tab.

⚠️

Warning

Repository federations and replication cannot co-exist in the same repository. Therefore, if the local repository has been set up previously for repository replication, these replication definitions are deleted automatically when the local repository is converted to a Federated repository.

To convert a local repository to a Federated repository:

  1. Go to the Administration module and select Repositories.

  2. Use the Repositories filter to show local repositories.

  3. At the end of the row for the relevant local repository, open the Actions menu and select Convert to Federated.

    convert_to_federated.png

    A prompt appears asking if you are sure you want to convert the local repository to a federated repository.

    prompt_to_convert_to_federated.png

  4. Click Convert.

  5. Optional: Add other members to the Federated repository, as described in Set Up a Federated Repository Using the UI.

📘

Converted Local Repositories Remain Federated

Removing the repository from the Federation does not automatically revert the repository to a local repository. Removing a repository from the Federation simply disconnects the bi-directional sync. However, the repository remains federated.

Use the Convert Federated Repository to a Local Repository REST API to convert back to local, if required.

Convert a Local Repository to a Federated Repository - REST API

You can convert a local repository to a Federated repository using the Convert Local Repository to a Federated Repository REST API.

📘

Converted Local Repositories Remain Federated

Removing the repository from the Federation does not automatically revert the repository to a local repository. Removing a repository from the Federation simply disconnects the bi-directional sync. However, the repository remains federated.

Use the Convert Federated Repository to a Local Repository REST API to convert back to local, if required.

Convert a Federated Repository to a Local Repository

You can convert a Federated repository back to a local repository using the Convert Federated Repository to a Local Repository REST API.

❗️

Important

The conversion from Federated back to local is allowed only if the Federated repository is not part of an active Federation containing additional members.

Convert a Build-Info Repository to a Federated Repository

Build-Info repositories can be set as a federated member in a Federation.

From Artifactory 7.35, you can convert an existing Build-Info repository to a Federated repository using the Artifactory REST API.

📘

Note

The Federated repository cannot be converted back to a local Build-Info repository.

Step 1: Convert the Build-Info Repository to a Federated Repository

POST /api/federation/migrate/{buildInfoRepoName}

Sample Input

POST /api/federation/migrate/artifactory-build-info
Migration finished successfully.

Step 2: Add Members to the Build-Info Federation

After you have converted the Build-Info repository into a Federated Build-Info repository, add members to the Federation using the Update Repository Configuration REST API.

{
    "key": "projectKey-build-info",
    "rclass" : "federated",
    "members": [
        { "url": "http://<target-JPD>/artifactory/projectKey-build-info", "enabled":"true"},
        { "url": "http://<target-JPD>/artifactory/projectKey-build-info", "enabled":"true"}
  ]
}

For more information, see Repository Configuration JSON.

Working with Federated Repositories

A Federation is a collection of Federated repositories in up to 10 JFrog Platform Deployments (JPDs) at different sites that are automatically configured for full bi-directional replication. Once you have set up the Federation, changes made to artifacts on one site will be automatically synchronized to the other JPDs in the Federation using bi-directional mirroring.

You can perform the following Federated repository procedures:

Working with Federated Artifacts

Once you have created the Federation, the Federated repositories are automatically displayed in your artifact browser.

Any of the CRUD actions that you perform are automatically applied to the member Federated repositories. Users can perform actions according to their permission sets. The logic is applied according to the last action performed on the artifact by any of the users in the Federation.

The importance of knowing which action occurred last is the reason why clock synchronization is critical to the proper functioning of the Federation (see Setup Prerequisites for Federated Repositories.

Pause/Resume Federated Synchronization

You can pause and resume synchronization of the artifacts from your Federated repository to the other member repositories.

When you pause a Federated repository, the other members of the Federation will not synchronize artifacts and metadata with the disabled member until you resume synchronization.

Fed-repo_pause-resume-switch.png

Remove Members from the Federation

Admins of any Federated members can remove themselves and other members from the Federation. Note that you can remove the initial repository and the Federation will continue to function between the remaining Federated members.

  1. From the Administration module, click Repositories and use the Repositories filter to display all the federated repositories.

  2. Select the Federation repository from the list and click the Federation tab.

  3. Click the x located on the top right of the repository to be removed.

    Fed-repo_remove-member.png

  4. Click Save.

Federation Member Removal – Legacy Service vs. Artifactory Federation Service

There is an important difference in the behavior of the Artifactory Federation Service and the legacy Federation service when you try to remove a member when a different member of the same Federation is offline (for example, due to network connectivity issues or if the remote JPD is down):

  • Legacy service: If member A tries to delete member B, the system allows the removal even though member C is offline. However, when member C comes back online, it will not be aware of the removal of member B. This requires you to make manual changes on the target JPD to bring member C back in sync with the rest of the Federation.
  • Artifactory Federation Service (RTFS): You cannot remove a member from the Federation if any other members are offline. Instead, you must first remove the offline members, as shown above.

Federation Recovery and Auto-Healing

❗️

Important

This feature requires all JPDs in the Federation to run Artifactory release 7.71.1 or later.

In certain cases, it may not be possible to maintain near real-time synchronization of all artifact events (create, update, delete) and binary tasks among Federation members. Examples include short-term networking issues between the JPDs, Artifactory upgrades, a user-initiated synchronization pause, and so on. If synchronization continues to fail after reaching the maximum number of retry events, event sync is paused and the Federation moves into an error state.

One way to recover the Federation is call the Full Sync API, but this can be a time-consuming process if the Federated repositories contain a large number of artifacts, as this amounts to restarting the Federation.

Artifactory features an auto-healing mechanism that ensures the reliability and consistency of Federated repositories by performing recovery actions at regular intervals. These recovery actions include:

  • Recovering exhausted queues: The auto-healing mechanism checks for queues that have exceeded the maximum number of attempts to send events to other Federation members. Such queues are considered exhausted. The auto-healing mechanism resets the failed events automatically, enabling the system to retry synchronization with the target mirror.
  • Recovering exhausted binary tasks: In cases where binary tasks have reached their maximum retry attempts (default: 10 retries), the auto-healing mechanism invokes the Replay Failed Binary Tasks API. This API resets the retry count for the task, enabling the system to retry the task and ensure that binary synchronization tasks are completed successfully.
📘

Note

If events have accumulated over a period of days, the event cleanup mechanism might potentially clean events that have not been propagated, causing the queue to move to an out-of-sync state. In such cases, performing a full sync is required.

Email Notifications

All administrators who are registered for Artifactory's mail service will receive notifications similar to the one shown below when auto-healing takes place:

2023-09-21T10:39:24.696Z [jfrt ] [INFO ] [29cb8b34b3ec63e4] [atedRepositoryRecoveryTest:247] [TestNG_1            ] [rt_229036255 ] [rt_229036255] - Mail notification subject: [JFrog] Mirror Recovery in Progress
2023-09-21T10:39:24.696Z [jfrt ] [INFO ] [29cb8b34b3ec63e4] [atedRepositoryRecoveryTest:249] [TestNG_1            ] [rt_229036255 ] [rt_229036255] - Mail notification content: ------=_Part_0_2088885210.1695292764495
Content-Type: text/html; charset=us-ascii
Content-Transfer-Encoding: 7bit

"Auto Healing" task has recognized a mirror in an exhausted state: 'http://localhost:11552/artifactory/generic-fed-9ac0b669-5760-4ff3-a209-c6b8c7826928' -> 'http://localhost:55295/artifactory/generic-fed-9ac0b669-5760-4ff3-a209-c6b8c7826928'.
Recovery attempt is now in progress...

System Properties

Federation recovery and auto-healing are controlled using the following properties in the artifactory.system.properties file:

Property

Description

artifactory.auto.healing.job.interval.sec

Defines the interval (in seconds) at which the auto-healing feature checks for exhausted queues.

The default value is 20 seconds.

artifactory.federated.subsequent.event.grace.period

Defines the buffer that works in conjunction with the federated. negotiation.enabled setting.

The default value is 60 seconds.

artifactory.federated.event.queue.max.error.retries

Defines the number of attempts to send a queued Federated event before the queue becomes exhausted and therefore eligible for auto-healing.

The default value is 6.

artifactory.persistentQueue.max.lock.lease.time.minutes

Defines the delay interval (in minutes) between attempts to trigger the queue.

The default value is 1.

artifactory.reset.stale.full.sync.job.interval.min

Defines the interval (in minutes) for an async task that resets the status of a Full Sync operation that has become "stuck", enabling the Full Sync to restart.

This property is useful, for example, if the Artifactory instance is restarted while a Full Sync operation is running. After the restart, this async task will reset the operation and restart it.

The default value is 15.

artifactory.reset.stale.full.sync.job.initial.delay.min

Defines the initial delay (in minutes) before running the async task that resets the status of a stuck Full Sync operation.

The default value is 1.

Manual Recovery using a REST API

Use the Federation Recovery REST API to perform recovery manually. This API can be used when auto-healing has been disabled or when you want to perform recovery immediately without waiting for the auto-healing interval to arrive.

Perform Full Sync on Federated Repositories

Tip

Users who are running Artifactory 7.71.1 or later on all their JPDs should use the auto-healing mechanism (or perform Federation recovery manually using the REST API) before resorting to performing a Full Sync.

In certain cases, it might not be possible to synchronize all the metadata events between repository Federation members. For example, suppose two members are disconnected for a long period of time (for example, more than 3 days). In that case, old events might be deleted from the queue making it impossible to copy those events to the remote member after restoring the connection.

When regular synchronization is incomplete, the solution is to perform a unidirectional Full Sync operation between the repositories. The Full Sync operation synchronizes all the events in one JPD by copying any missing files to designated remote JPDs. However, Full Sync does not synchronize any deleted events.

For example, suppose a file was deleted from JPD A, but the event wasn't propagated to the remote site (JPD B) before the event was deleted from the queue. If you run Full Sync on JPD B (where the file deleted from JPD A still exists), the operation will restore the file on JPD A.

Therefore, if you need to synchronize the entire Federation, you must run the Full Sync operation on all members.

Bear in mind that a Full Sync operation can be time-consuming if the Federated repositories contain many artifacts, as this amounts to restarting the Federation.

A Full Sync operation is performed using the Federated Repository Full Sync REST API. You can use this API to synchronize specific Federated repositories or all the Federation repositories in the Federation.

📘

Note

For more information about configuring Full Sync operations, see:

How Full Sync Works

When you initiate a Full Sync operation, the query is sent to the remote member, which begins compiling a file list of the repository's contents. The local JPD polls the remote JPD every 30 seconds (this interval is configurable - see the note below) to check whether the file list is ready. The advantage of using this polling method is that it removes the need to keep the connection between the members open for a long period of time, which in the case of large repositories can lead to timeouts.

When ready, the remote JPD sends its file list to the local JPD for comparison with the local file list, and then the Full Sync operation can begin.

📘

Note

The following property defines the polling interval:

federatedFullSyncPoolingWaitTime("federated.full.sync.pooling.wait.time.sec", TimeUnit.SECONDS.toMillis(30)),

Federation Comparison Tool

The REST API contains an option to use the Federation Comparison tool, which performs a dry run of a Full Sync operation and returns the results in a JSON file. For more information, see Use the Federation Comparison Tool.

📘

Note

You must have Artifactory 7.104.2 or later and the Artifactory Federation Service installed to use the Federation Comparison tool.

System Properties for Full Sync File List Queries

The following Artifactory system properties define how to execute file list queries for Full Sync operations on Federated repositories.

The property described in the table below defines how to perform file list queries.

Property

Description

artifactory.federated.full.sync.use.aql

When set to true (default), Artifactory uses a single AQL query to create the Full Sync file list.

When set to false, Artifactory uses one or more SQL queries to create the Full Sync file list.

The properties in the table below are relevant only when artifactory.federated.full.sync.use.aql is set to false.

Property

Description

artifactory.federated.full.sync.paging.threshold

If the number of artifacts for the file list is greater than this threshold, the file list is generated from multiple queries (paging).

If the number of artifacts is smaller than this threshold, the data for all artifacts is loaded using a single query.

The default value is 400000.

artifactory.federated.full.sync.page.size

When using paging to generate the Full Sync file list, this property defines the page size, which means the number of rows read by each database query.

The default value is 100000 rows.

artifactory.federated.full.sync.pages.per.file

Defines the number of pages placed in a single, temporary file to allow efficient sorting of the data.

The default value is 4.

Use the Federation Comparison Tool

📘

Note

This feature requires Artifactory 7.104.2 or later and the Artifactory Federation Service must be installed.

The Federation Comparison tool is a validation mechanism for Federated repositories. Instead of actively synchronizing artifacts, this tool compares the state of a Federated repository with one or more remote members to detect missing artifacts in those remote members.

The Federation Comparison tool enables you to verify that all necessary artifacts are properly synced between Federation members, helping to identify any discrepancies due to event loss or system issues.

To use the tool, set the isDry query parameter in the Full Sync REST API to true, as shown below:

curl -X POST "https://<your-artifactory-instance>/api/federation/fullSync/testDryFullSyncRepo?mirror=https://mirror-instance/artifactory/my-repo&isDry=true" \
     -H "Authorization: Bearer <your-token>" \
     -H "Content-Type: application/json"

The JSON report generated by the operation lists all the files that are present in the local member but missing from the remote members. The report is stored in the jfrog-full-sync-info system repository. The API response provides the path to the report.

Sample response:

{
  "message": "Dry full sync completed successfully.",
  "resultPaths": [
    "jfrog-full-sync-info/comparison-results/testDryFullSyncRepo-mirror-comparison-2025-02-04.json"
  ]
}

Sample report contents:

{
  "results": [
    {
      "name": "testDryFullSyncFile_1.txt",
      "type": "file",
      "fullPath": "folder/testDryFullSyncFile_1.txt"
    },
    {
      "name": "testDryFullSyncFile_2.txt",
      "type": "file",
      "fullPath": "folder/testDryFullSyncFile_2.txt"
    }
  ]
}

For complete details about the REST API, see Federated Repository Full Sync API.

Configure Federated Repositories for Bulk Mirroring and Parallel Processing

Bulk event mirroring, introduced in Artifactory version 7.63.2, helps to optimize Federation performance.

Before bulk event mirroring was introduced, artifacts were copied to target mirrors sequentially one event at a time per repository. This limited the number of events that could be processed in a reasonable amount of time and sometimes resulted in HTTP network bottlenecks, especially between geographically distant members where network latency can be a significant factor.

Bulk event mirroring bypasses potential HTTP network bottlenecks by collecting events into bulks, each of which is dedicated to a single repository, and sending them to the target mirror.

The target mirror assigns a dedicated thread pool to each bulk. Each pool contains multiple threads that upload artifacts to the local Artifactory in parallel. This parallel processing enables events to be uploaded much faster than was previously possible.

bulk-event-mirroring2.png

In addition to improving the standard event flow between Federation members, as described above, bulk events also improve the performance of Full Sync operations. Working in conjunction with a special cache mechanism (also introduced in 7.63.2), bulk mirroring helps to greatly reduce the load on Artifactory during Full Sync operations.

The following Event Queue properties can be configured for bulk event mirroring:

Property

Description

artifactory.federated.mirror.events.bulk.exclude.repo.types=

Excludes specific package types from bulk event mirroring.

To exclude all package types:

federated.mirror.events.bulk.exclude.repo.types=*

To exclude specific package types, separate the types with a comma:

=docker,composer,npm

artifactory.federated.mirror.events.bulk.max.pools

The number of available event processing thread pools (executors).

Default: 4

Maximum: 5

artifactory.federated.mirror.events.bulk.threadsPerPool

The number of threads per pool (executor).

Default: 4

Maximum: 5

artifactory.federated.mirror.events.batch.message.bulk.size

The number of Event Queue events sent with each replication message to the target mirror.

Default: 100

artifactory.federated.mirror.events.bulk.executor.poll.timeout.minutes

The amount of time new requests will wait (in minutes) if all processing pools are occupied.

Default: 2

Bulk fetching of event properties from the database was introduced in Artifactory release 7.100.x as an additional performance enhancement. The following property can be configured:

Property

Description

artifactory.federated.bulk.properties.enabled

Determines whether bulk property fetching is enabled.

Default: false (disabled)

The following Full Sync event properties can be configured for bulk event mirroring:

Property

Description

artifactory.federated.mirror.events.bulk.fullSync.threadsPerPool

The number of threads per pool. Full Sync events take priority in a single dedicated executor containing the number of threads defined here.

Default: 10

Maximum: Determined by the number of available processors.

artifactory.federated.mirror.events.bulk.fullSync.executor.wait.timeout.minutes

The amount of time (in minutes) that Full Sync calls for other repositories wait while the pool works on the Full Sync of a particular repository.

Default: 2

artifactory.full.sync.batch.retry.count

The number of times to retry a failing batch (bulk) when performing Full Sync.

Default: 5

artifactory.full.sync.batch.retry.quiet.period.seconds

The amount of time to wait between batch (bulk) retries.

Default: 5 seconds

📘

Note

This event property requires Artifactory 7.77.3 or above.

Configure In-Memory Sorting for Full Sync Operations

Full Sync queries can take a long time to perform, and under extreme circumstances can sometimes fail to complete. Users who determine that their database is not sufficiently robust or scalable to accommodate heavy loads have the option to sort queries in memory instead of in the database. The sort is performed according to depth, path, and name.

Use the following system properties to configure in-memory sorting:

Property

Description

artifactory.federated.repo.full.sync.enabled.inMemorySorter

Enables in-memory sorting.

Default value is false (sorting performed in the database).

artifactory.federated.repo.full.sync.limit.entries.for.split

Determines how many artifacts in the file list are sorted at one time. (This property is relevant only when in-memory sorting is enabled.)

Default value is 400000.

Geo Synchronized Topology Use Case: Setting a Federated Base URL

The geo-synchronized topology is an extension of the full mesh topology whereby several Artifactory instances are connected to a GeoDNS. In this use case, the desired outcome is to have the exact same configuration (repository names, users, groups, permission targets) in all of the instances connected to the routing server. Users can then deploy and resolve from the same repositories without the need to change the configuration in their build tool according to the server to which they are routing (for example, to divide a load among multiple instances in different locations). For these users, everything is behind the scenes and they just connect to Artifactory through one dedicated URL.

📘

Note

Federated repositories do not operate synchronously, and therefore it is recommended to work with one fixed site. If the decision is made to move between one site and another, you must take into account that it takes time for all events to be synchronized between those sites.

Setting an Initial Federated Repository URL

A geo-synchronized topology requires that all platform deployments (Artifactory instances) be configured with the same Custom Base URL. However, Federated repositories also need a unique Federated Base URL to distinguish between the Federated members in the different platform deployments.

To work with Federated repositories within a geo-synchronized topology, add the federatedRepoUrlBase parameter to the Global Configuration Descriptor file, which is the global Artifactory configuration file used to provide a default set of configuration parameters.

The following XML tag should be added under the <systemProperties> section in the Global Configuration Descriptor:

<urlBase>https://<ART_LB_URL></urlBase> {/* NOTE: Enter your Geo-LB URL */}
<federatedRepoUrlBase>https://ARTIFACTORY_SERVER_HOSTNAME/artifactory</federatedRepoUrlBase>

For information on how to modify the Global Configuration Descriptor, see Global Configuration Descriptor.

📘

Important

The federatedRepoUrlBase described above is relevant ONLY for Federated repositories and cannot be applied to other features. For a detailed guide that describes how to set the urlBase and still allow redirects and metadata to map to the Geo-LB, see Geo-Location LB Setup Steps.

Migrating Federated Repositories to a Geo-Synchronized Topology

From Artifactory version 7.21.13, you can migrate your existing Federated repositories to be configured with a dedicated Federated Repository URL instead of the Artifactory base URL.

📘

Migrating in an HA Environment

When setting up Federated Repositories in an HA environment, ensure on both sites that only one HA node is up and running.

To migrate Federated repositories to a geo-synchronized topology:

  1. Disconnect all the Federated repositories in either one of the sites, using one of the following methods:

    • One at a time on the Federated Repository page in the UI
    • Directly through the Config Descriptor file.
  2. Wait for a while and then validate that all the Fed repositories are disconnected on the member site.

  3. Navigate to $JFROG_HOME/artifactory/var/etc/artifactory/artifactory.config.xml and add the following XML tag.

    <federatedRepoUrlBase>https://<address>/artifactory</federatedRepoUrlBase>
  4. Reconnect all the Federated repositories.

  5. Validate that the configuration was applied in the member site.

  6. Monitor the logs for related errors.

  7. [Test] Upload a new file for each Repo to site 1 and download it to site 2.

  8. [Optional] Perform full synchronization if during the time that the Fed Repos were disconnected changes occurred on one of the sites (For example upload, override, change in properties, or delete actions).

Change the Base URL in Federated Repositories

Administrators can change the base URL in an active Federated repository with remote members. Changing the base URL might be necessary, for example, if the network topology has changed.

❗️

Important

This feature is available only when all Federation members are using version 7.55.1 or above.

The steps required to complete the change are dependent on whether the Federation uses the base URL or a special Federated base URL.

If a Federated base URL has been defined, the JPD publishes this address to all Federation members, who then use this address to access the Federated repository on the JPD instead of the standard base URL.

change-base-URL_diagrams_with-FedBaseURL.png change-base-URL_diagrams_without-FedBaseURL.png
❗️

Important

As a fallback, it is possible to change the base URL more aggressively by canceling the Federation, changing the base URL, and then recreating the Federation. However, this has a huge impact on the system since it requires recreating each Federated repository from scratch.

Possible Use Cases

When changing the base URL in Federated repositories, there are two possible use cases:

It is highly recommended to test the functionality of the Federation after changing either the base URL or the Federated base URL, as described in After Changing the Base URL.

Change the Base URL

Administrators can change the base URL directly from the JFrog platform UI, as described below.

📘

Note

The custom Base URL is blocked on SaaS platforms and enabled on Self-Hosted platforms.

  1. In the Administration module, select General Management > Settings.

  2. Enter a new custom base URL.

  3. Click Save.

    image__1_.png

  4. The next steps to be performed are dependent on the type of Federation service installed on the members:

Federation service in use on source & target

Steps to perform

Legacy to Legacy

  1. Generate a new pairing token and pair the target JPD to the source JPD.
  2. Pair the target JPD to the source JPD.
  3. Replace the Base URL/Federated Base URL on the target.

For more information about these steps, see Generate New Tokens for Federation Members.

Legacy to RTFS

  1. Generate a new pairing token and pair the target JPD to the source JPD.
  2. Pair the target JPD to the source JPD.
  3. Replace the Base URL/Federated Base URL on the target.

For more information about these steps, see Generate New Tokens for Federation Members.

RTFS to Legacy

  1. Generate a new pairing token and pair the target JPD to the source JPD.
  2. Pair the target JPD to the source JPD.

For more information about these steps, see Generate New Tokens for Federation Members.

RTFS to RTFS

A new pairing token is not required. Continue below.

  1. Verify the functionality of the Federation, as described in After Changing the Base URL.

Tip

You can also change the custom base URL using the Update Custom URL Base REST API.

Change the Federated Base URL

If the Federation uses a Federated base URL, the Administrator can make changes to it directly using the Config Descriptor.

To change the Federated Base URL:

  1. In the Administration module, select Artifactory Settings > Config Descriptor.

  2. Search the configuration file for a Federation base URL entry:

    Fed_base_URL_config-descriptor_edit.png

  3. Make the required changes to the Federation base URL and save your changes.

Generate New Tokens for Federation Members

After changing the base URL or Federated base URL, the administrator must generate a new pairing token and pair the source and target JPDs.

❗️

Important

Make sure to perform this procedure on each remote Federation member that uses the legacy Federation service. This procedure does not need to be performed on members that use the Artifactory Federation Service (RTFS).

To generate new tokens:

  1. Generate a new token from the source JPD using the Create Pairing Token Platform REST API.

  2. Pair the target JPD to the source JPD using the new token with the Initiate Pairing Platform REST API .

  3. Replace the base URL (or Federated base URL) by executing the following POST request against the target JPD: api/federation/replaceUrl with the following body:

    {  
        "oldBaseUrl": "http:/<old base URL>/artifactory",  
        "newBaseUrl": "http://<new base URL>/artifactory"
    }
  4. Continue with the next section, After Changing the Base URL.

After Changing the Base URL

It is strongly recommended to test the functionality of the Federation after changing the base URL or Federated base URL. After verifying that the Federation members are synchronized, the administrator can optionally revoke the obsolete keys.

To test the functionality of the Federation after changing the base URL:

  1. In the Administration module, select Monitoring > Federation Status. If you see that the Federation is no longer in sync, there is a problem with the new configuration. See View Federation Sync Status for more information.
  2. [optional] After verifying that all Federation members have synchronized successfully with the updated base URL, revoke the obsolete key for each remote JPD using the Revoke Token by ID REST API.

Increase the Predefined Socket Timeout for Larger Repositories

From Artifactory version 7.38.17 (Self-Hosted), you can increase the socket timeout when syncing large repositories between federated members within a Federation.

To increase the timeout time, use the Artifactory system propertyartifactory.mirror.http.client.socket.timeout.mili in the artifactory.system.properties file.

Troubleshoot Federated Member Out-of-Sync Notifications

If any members of your Federation are out of sync, the system triggers an out-of-sync notification. This can occur due to network failures or changes to your Federated members.

You can manually push the updated configuration to the target Federated member, using one of these methods:

To manually push an updated configuration to a target federated member in the UI:

  1. In the Administration module, select Repositories.

  2. Use the Repositories filter to show federated repositories.

  3. Select the relevant Federated member, and from the Actions menu, select Push Configuration.

    Push_Configuration.png

Monitor Federated Repositories

You can monitor the status of Federated repositories using a variety of tools, including:

The available monitoring tools are dependent on whether you are using the standalone Artifactory Federation Service (introduced for Cloud environments in Q3 2024 and for Self-hosted environments in Q1 2025) or the legacy Federation service that existed earlier.

Monitor Federated Repositories using the Federation Dashboard

Administrators can use the Federation dashboard to track the current state of your Federated repositories.

📘

Note

The Federation dashboard requires an Artifactory release that supports the standalone Artifactory Federation service (release 7.104.2 or later).

At the site level, administrators can use the dashboard to:

  • Understand the general health of all repository Federations at a glance
  • Assign priority to selected repositories to provide them with greater access to system resources
  • Filter the display to view all Federated repositories experiencing errors or delays

At the Federation level, administrators can use the dashboard to:

  • Drill down to view the connection states between all members of a selected Federation
  • View additional information about repository Federations, such as the number of binary tasks in progress

For more information about the Federation dashboard, see:

View the Status of All Repository Federations

Use the Federations dashboard to view a list of repository Federations and their current synchronization status.

To view the repository Federation status table:

In the Administration module, select Monitoring > Federation Status.

Fed-dashboard_final-main.png

View Status Summaries

The tiles displayed above the table indicate how many repository Federations on this JPD currently have the following statuses:

Status

Description

Healthy

Federations can attain a Healthy status only when all members are experiencing timely synchronization of metadata events.

For example, a Federation cannot attain this status if one of its members has an error, is involved with a Full Sync operation, or is experiencing delays.

Delayed

Indicates how many Federations have at least one member with high latency, which means that synchronization of metadata events is taking longer than expected.

Error

Indicates how many Federations have at least one member with synchronization errors.

Pending Full Sync

Indicates how many Federations have at least one member waiting for a Full Sync to be performed. A Full Sync is performed during the initialization process when a Federation is created, and as a way to restore synchronization when regular synchronization and auto-healing are insufficient (for example, if there are purged events that are no longer available to be synchronized).

Full Sync Running

Indicates how many Federations have at least one member currently undergoing the Full Sync procedure.

The state of each member is based on an aggregation of all connections that are federated with the JPD on which this endpoint is run. The aggregation is based on the most severe state. In the example shown below, metadata events sent from the Federated repository gen-fed-fr are synchronizing in a timely fashion with gen-fed-au. Therefore, that connection is HEALTHY. However, there is a delay in sending events from gen-fed-fr to gen-fed-us. Therefore, the aggregated status of gen-fed-fr is DELAYED.

Federation_Repo_State_Summary_diagram_cropped.png

Filter the Repository Federations Table

Click one of the status cards to filter the Repository Federations table according to that status. For example, clicking the Healthy card shows only those Federations whose members are all synchronizing events in a timely fashion.

Fed-dashboard_healthy-filter.png

Tip

Click the filter icon above the table to filter it according to multiple statuses.

View the Status of Each Repository Federation

The Repository Federations table includes the following information:

Column

Description

Priority

A row displaying the flag icon indicates this Federated repository has been assigned priority to system resources. For more information, see Assign Priority to Federated Repositories.

Repository Key

The repository key of the member of the repository Federation on this JPD.

Members

The number of members in this repository Federation. For more information, see View Federation Members.

Status

The overall status of the repository Federation. The status is based on the most severe status among its members.

For example, if the Federation has 5 members, some of which are in Error status, the overall status of the Federation is shown as Error together with an indication of how many members have that status.

📘

Note

The status severity order (from highest to lowest) is as follows:

  • Error
  • Delayed
  • Pending Full Sync
  • Full Sync Running
  • Disabled (the user has removed the member from the Federation)
  • Unsupported (the member is running a version of Artifactory that does not support the Federation dashboard)
  • Healthy

View Federation Members

In one of the table rows, click the rectangle displaying the number of Federation members to open a popup window with a list of the members and their current status.

Fed-dashboard_view-members2.png
Assign Priority to Federated Repositories

When you assign priority, you provide the event queue of the selected Federated repository with priority access to system resources. This is done to help ensure the timely synchronization of its events with the other members of the Federation.

📘

Note

Since system resources are finite, priority should be assigned sparingly, as prioritizing too many repositories effectively cancels out the benefits of prioritization. The limit is 10 repositories or 20% of the total number of repositories, whichever is lower.

To assign priority:

  1. Go to the table row for the repository you want to prioritize and hover over the Priority field. A flag icon will appear.

  2. Click the flag icon to assign priority to the selected repository.

    Fed-dashboard_priority.png

  3. To remove priority from a selected repository, click the flag icon to remove it from the table.

    Fed-dashboard_de-priority.png

📘

Note

To prioritize an entire Federation you must assign priority to each member of the Federation separately.

View the Status of a Selected Repository Federation

Select a Federated repository from the Federations table to view the status of the connections between this repository and the other Federation members, including the current latency and the number of queue events waiting to be sent.

To view the status of a selected repository Federation:

  1. In the Administration module, select Monitoring > Federation Status to open the Federations page.

  2. Click the name of the repository key belonging to the Federation you wish to examine. The Federation Status window is displayed.

    Fed-dashboard_select-repo_Tom.png

The top of the Federated Status window contains the name of the selected Federation member and the following information about it:

  • The number of replication tasks that are currently in progress.
  • The total number of replication tasks that have failed to complete.

The Metadata Event Connections table includes a row for each incoming and outgoing connection related to the selected member. The table contains the following information about each connection:

Column

Description

Source

The repository on the source member responsible for sending events.

Target

The repository on the target member responsible for receiving events.

Status

The current status of the connection between the target and source members:

  • Healthy: Indicates there is timely synchronization of all metadata events from the source to the target.
  • Delayed: Indicates whether the synchronization of metadata events between the source and target is taking longer than expected.
  • Error: Indicates at least one synchronization error between the source and target.
  • Pending Full Sync: Indicates that a Full Sync will soon be performed between the source and target.
  • Full Sync Running: Indicates that the connection between the source and target is undergoing the Full Sync procedure.
  • Disabled: Indicates the target is disabled, which means no events are being sent to it.
  • Unsupported: Indicates the target is running a legacy version that does not support the Federation dashboard.
  • N/AIndicates that the status cannot be determined because the source or target is unreachable.

Latency

The length of time that has passed since the last event that was handled successfully.

Queued Events

The total number of events waiting to be sent to the target repository.

Tip

To view the connections between a different source member and the other members of the Federation, select the source from the dropdown list. An icon is displayed next to the selected member for easier identification. Click the x icon to view the connections between all members.


RTFS State Machine Reference

This section documents the state machines used by the standalone Artifactory Federation Service (RTFS) to track Federation members and binary tasks. Understanding these states helps administrators troubleshoot synchronization issues and interpret monitoring data.

📘

Note

This reference applies to the standalone Artifactory Federation Service introduced for Cloud in Q3 2024 and for Self-hosted in Q1 2025. For legacy state behavior, see Legacy Queue States.

Member State Machine

Federation members transition through lifecycle states while RTFS performs queue processing, full sync, and recovery operations.

Member State Diagram
stateDiagram-v2
    [*] --> PENDING_FS: New member or full sync required
    PENDING_FS --> FULL_SYNC_PREPARING: Full sync starts
    FULL_SYNC_PREPARING --> FULL_SYNC_RUNNING: File list prepared
    FULL_SYNC_RUNNING --> HEALTHY: Sync completed

    HEALTHY --> DELAYED: High worker lag detected
    DELAYED --> HEALTHY: Lag recovered

    HEALTHY --> ERROR_GENERIC: Processing error
    HEALTHY --> ERROR_INACTIVE: Target unreachable
    HEALTHY --> ERROR_OUT_OF_SYNC: Missing purged events

    ERROR_GENERIC --> HEALTHY: Auto-heal or retry succeeded
    ERROR_INACTIVE --> HEALTHY: Connectivity restored
    ERROR_OUT_OF_SYNC --> PENDING_FS: Full sync required

    HEALTHY --> READ_ONLY: Receiver-only mode enabled
    READ_ONLY --> HEALTHY: Bi-directional sync restored

    HEALTHY --> DISABLED: Member disabled by admin
    DELAYED --> DISABLED: Member disabled by admin
    ERROR_GENERIC --> DISABLED: Member disabled by admin
    ERROR_INACTIVE --> DISABLED: Member disabled by admin
    ERROR_OUT_OF_SYNC --> DISABLED: Member disabled by admin
RTFS Member State Reference
StatusDescriptionAuto-Heals?User Action
HEALTHYMember is synchronized and processing events normally.N/ANone required.
READ_ONLYMember is configured as a receiver only. Events are received but not sent.NoCheck configuration if this is unexpected.
FULL_SYNC_PREPARINGRTFS is building file lists and preparing a full sync run.Yes (if stale)Wait for completion.
FULL_SYNC_RUNNINGRTFS is comparing and synchronizing artifacts between members.Yes (if stale)Wait for completion.
PENDING_FSMember is queued and waiting for full synchronization to begin.NoWait for automatic processing.
ERROR_GENERICA general processing error occurred.YesCheck logs if auto-healing does not recover.
ERROR_INACTIVEMember is unreachable.YesVerify network connectivity and member health.
ERROR_OUT_OF_SYNCFull sync failed, or queued events were deleted before synchronization could complete.YesA full sync may be required.
📘

Note

Status priorities determine the aggregated status shown in the Federation dashboard. When aggregating across members, the state with the highest severity is shown.

Dashboard Status Mapping

The Federation dashboard displays simplified labels that map to RTFS member states.

Dashboard StatusUnderlying StatesDescription
HealthyHEALTHYAll metadata events are synchronizing normally.
DelayedHEALTHY (with high lag)Synchronization is slower than expected. This is based on lag metrics, not a distinct RTFS state.
ErrorERROR_GENERIC, ERROR_INACTIVE, ERROR_OUT_OF_SYNCOne or more synchronization errors are detected.
Pending Full SyncPENDING_FSMember is waiting for full sync to begin.
Full Sync RunningFULL_SYNC_PREPARING, FULL_SYNC_RUNNINGFull sync operation is in progress.
Disabledenabled=falseMember is disabled by an administrator.
UnsupportedN/AMember is running a version that does not support the Federation dashboard.

Binary Task State Machine

When RTFS propagates a CREATE or UPDATE event, binary content may not exist on the target. RTFS creates a binary task to transfer that content.

Binary Task Lifecycle
stateDiagram-v2
    [*] --> AVAILABLE: Event requires binary

    AVAILABLE --> IN_PROGRESS: Storage handler picks up task
    IN_PROGRESS --> COMPLETED: Binary transferred successfully
    IN_PROGRESS --> AVAILABLE: Transient failure, retry
    IN_PROGRESS --> EXHAUSTED_SUBMISSION: Max Artifactory retries exceeded
    IN_PROGRESS --> EXHAUSTED_STORAGE: Max storage retries exceeded
    IN_PROGRESS --> REJECTED: Binary rejected by target

    COMPLETED --> DELETED: Task cleanup
    DELETED --> [*]

    EXHAUSTED_SUBMISSION --> AVAILABLE: Manual replay triggered
    EXHAUSTED_STORAGE --> AVAILABLE: Manual replay triggered
    REJECTED --> [*]: Task cannot be retried
Binary Task Status Reference
StatusDescriptionNext Action
AVAILABLETask is queued and waiting for a storage handler.Automatic pickup by a handler.
IN_PROGRESSHandler is downloading from source or uploading to target.Automatic completion or retry.
COMPLETEDBinary transferred successfully.Task is removed from queue.
DELETEDTask is marked for deletion after successful completion.Automatic cleanup.
EXHAUSTED_SUBMISSIONMaximum retries when submitting to Artifactory are exceeded.Use the Replay Failed Binary Tasks API.
EXHAUSTED_STORAGEMaximum retries for storage operations are exceeded.Use the Replay Failed Binary Tasks API.
REJECTEDTarget Artifactory rejected the binary due to validation or policy checks.Review rejection details in logs.
Monitoring Binary Tasks

Use these metrics to monitor binary task health:

  • jfrtfs_binary_tasks_total_count_by_status
  • jfrtfs_binary_tasks_handler_execution_duration_millis

Tip

A high count of EXHAUSTED_SUBMISSION or EXHAUSTED_STORAGE tasks indicates failures that require investigation. Use the Replay Failed Binary Tasks API after addressing root cause.


Monitor Federated Repositories using REST APIs

You can monitor the status of Federated repositories using a set of dedicated REST APIs. The endpoints that are available are dependent on whether you are using the standalone Artifactory Federation Service (introduced for Cloud environments in Q3 2024 and for Self-hosted environments in Q1 2025) or the legacy Federation service that existed earlier.

Monitoring APIs for the Standalone Artifactory Federation Service

The Artifactory Federation Service includes the following monitoring APIs:

Monitoring APIs for the Legacy Federation Service

The legacy Federation service includes the following monitoring APIs:

Monitor Federated Repositories using Open Metrics

In addition to viewing the status of Federated repositories within the platform UI, it is possible to gather Federation performance data using a set of metrics that complies with the Open Metrics standard. This data can then be accessed by 3rd party monitoring tools without the need for custom inbound API calls.

📘

Note

This feature was introduced in version 7.63.7 and is available for Self-hosted customers only.

The Open Metrics that are available is dependent on whether you are using the standalone Artifactory Federation Service (introduced for Cloud environments in Q3 2024 and for Self-hosted environments in Q1 2025) or the legacy Federation service that existed earlier.

Open Metrics for the Artifactory Federation Service

When using the Artifactory Federation Service, see Artifactory Federation Service Custom Metrics.

Open Metrics for Legacy Federation

When using the legacy Federation service, see the following topics:

Artifactory Federation Service Custom Metrics

This section outlines the custom metrics collected by the standalone Artifactory Federation service.

Metrics Granularity

Due to potential performance overhead, custom metrics are collected by default at the tenant level. However, selected metrics can collect data at the repo key or member level if predefined thresholds are exceeded.

⚠️

Warning

These granular metrics should be implemented and used with caution due to their potential performance impact.

Available Metrics

Custom metrics for the Artifactory Federation service are divided into the following categories:

Lag Metrics

The Artifactory Federation service includes the lag metrics described in the table below.

Name

Description

Type

Granularity

jfrtfs_worker_lag_seconds

The lag time when transferring events to the remote member.

The calculation:

Lag = Current time - Trailing baseline time

Trailing baseline time =

  • Last processed event time

    or

  • Trailing stream detection time (when the stream takes longer than the grace period to process the events it receives)

Gauge

Per tenant

pq_queue_lag

{queue_name="jfrog_federation_ service_queue"}

The lag of the Artifactory Federation queue (in milliseconds).

Gauge

Per tenant

pq_queue_events_left

{queue_name="jfrog_federation_ service_queue"

The number of events that remain to be handled to overcome the lag.

Counter

Per tenant

Event Metrics

The Artifactory Federation service includes the event metrics described in the table below.

Name

Description

Type

Granularity

jfrtfs_events_received_from_artifactory _total

The total number of events received by the Federation service from Artifactory.

Counter

Per tenant

jfrtfs_events_removed_in_filter_total

The total number of deduped (deduplicated) events filtered out of the queue.

For example, imagine an artifact with two events in the queue. In the first event, the artifact is updated and in the second it is deleted. The first event is removed from the queue to streamline the process, and only the deletion event is sent to the remote member.

Counter

Per tenant

jfrtfs_events_received_from_remote_ rtfs_total

The total number of events received by the tenant from remote members.

Counter

Per tenant

jfrtfs_events_sent_to_remote_ instance_total

The number of events sent from the tenant to remote members.

📘

Note

This metric includes both members running the Artifactory Federation service and members running the legacy Federation service.

Counter

Per tenant

jfrtfs_repo_management_message_blob_ duration_between_partition_creations

Tracks the duration between the creation of partitions in themessage_blob table in the RTFS DB.

Gauge

Per Tenant

jfrtfs_repo_management_events_ duration_between_partition_creations

Track the duration between the creation of partitions in the events table in the RTFS DB.

Gauge

Per Tenant

Full Sync Metrics

The Artifactory Federation service includes the Full Sync metrics described in the table below.

Name

Description

Type

Granularity

jfrtfs_full_sync_e2e _member_execution_seconds_count

The total number of Full Sync operations that have been executed.

Counter

Per Tenant / Member

jfrtfs_full_sync_e2e_ member_execution_seconds_sum

The total end-to-end duration of all Full Sync operations.

Configure the threshold using the property: rfts.full.sync.execution.time.threshold.min

(default=30 min.)

Timer

Per Tenant / Member

(per member if a single Full Sync operation exceeds the threshold)

jfrtfs_full_sync_sort_rate _artifact_per_ms

The file list sort rate (in milliseconds).

The rate is calculated by dividing the number of artifacts in the file list by the total sort time.

Configure the threshold using the property:

rtfs.file.list.sort.rate.threshold.ms.per.artifact

(default = 10000 ms)

Gauge

Global

jfrtfs_full_sync_artifact _events_propagation_rate

The artifact event propagation rate in milliseconds.

The rate is calculated by dividing the number of artifact events sent to the remote member by the total amount of time needed to propagate them (i.e. elapsed time between sending events and receiving an OK response from the remote member).

Gauge

Global

jfrtfs_full_sync_file_ list_artifacts

The total number of artifacts in the file list of the local member.

Configure the threshold using the property:

rtfs.file.list.size.metrics.threshold

(default = 1 million)

Counter

Per Tenant / Member (if the threshold is exceeded)

jfrtfs_full_sync_file_list _artifacts_rate_artifact_per_ms

The file list compilation rate in milliseconds.

The rate is calculated by dividing the number of artifacts in the file list by the total amount of time to get the file list.

Configure the threshold using the property:

rtfs.file.list.process.rate.threshold.ms.per.artifact

(default = 5 sec.)

Gauge

Global

Member State Metrics

The Artifactory Federation service includes the member state metrics described in the table below.

Name

Description

Type

Granularity

jfrtfs_auto_healing_recovered_members

The total number of recovery operations that have been performed using the auto-healing process. For example, recovery performed once on 5 members is equivalent to recovery being performed on the same member 5 times.

Counter

Global

jfrtfs_members_in_status

The current number of members in the following states:

  • FS_RUNNING
  • PENDING_FS
  • IMPORT_IN_PROGRESS
  • ERROR_GENERIC
  • ERROR_OUT_OF_SYNC
  • ERROR_INACTIVE

Disabled members are filtered out.

Gauge

Per Tenant

jfrtfs_disabled_members

The total number of members disabled locally by the user.

Counter

Per Tenant

Miscellaneous Metrics

The Artifactory Federation service includes the additional metrics described in the table below.

Name

Description

Type

Granularity

jfrt_rpc_response_from_rtfs_total

{statusCode!=200}

The total number of HTTP errors between Artifactory and the Artifactory Federation service.

Counter

Global

jfrtfs_db_failed_query_count_total

The total number of failed database queries in the Artifactory Federation service.

Counter

Global

jfrtfs_db_failed_query_count_metric

The total number of failed database queries.

Counter

Global

jfrtfs_db_query_duration_metric

The amount of time that was needed to execute a specific query.

Counter

Depends on query

jfrtfs_http_client_available

The percentage of available HTTP client connections.

Gauge

Global

jfrtfs_http_client_leased

The percentage of leased HTTP client connections.

Gauge

Global

jfrtfs_http_client_pending

The number of pending HTTP client connections.

Counter

Global

Artifactory System Properties for Federated Repository Metrics

The following Artifactory system properties are used to configure Federated repository monitoring data based on the Open Metrics standard:

  • artifactory.federated.metrics.enabled

    Determines whether metrics writing for Federated repositories is enabled (true/false). The default value is false.

  • artifactory.federated.metrics.sync.threshold.time.ms

    Defines the minimum threshold (in ms) above which the Open Metrics counter will indicate a repository has breached the sync threshold. The default value is 20000 (20 seconds).

📘

Note

The default value is also the minimum value.

  • artifactory.federated.metrics.monitoring.interval.time.sec

    Defines the measurement interval for the Federation synchronization of all repositories. The default value is 30 seconds.

📘

Note

The system will override any defined value that is under the minimum set by JFrog to protect the system, currently set for 5 seconds.

  • artifactory.federated.metrics.exclude.disabled

    Determines whether to exclude disabled mirrors (whose sync lag by definition is always increasing) from metrics writing. The default value is true.

  • artifactory.federated.metrics.enable.count.disabled.members

    Determines whether to count the number of disabled members across all existing Federations in the JPD. The default value is true.

Federated Repository Metrics

The metrics available for monitoring Federated repositories are based on the Get Federation Mirror Lag Time REST API:

GET api/federation/status/mirrorsLag
❗️

Important

The first four metrics described below are applicable only to healthy Federations. These metrics ignore Federated repositories that are down or disabled.

Federation Mirror Lag

Example:

jfrt_federation_member_lag_total{local_repo_key="example-repo-local", remote_repo_key="test3-repo", remote_url="http://docker.for.mac.localhost:10102/artifactory/"} 5000 1575374691025

Records all Federated repositories whose sync lag exceeds the defined threshold (in milliseconds).

📘

Note

The measured lag must exceed the minimum threshold value defined in the system property artifactory.federated.metrics.sync.threshold.time.ms.

Federation Mirror Maximum Lag

Example:

jfrt_federation_max_lag_ms_total 500 1575374698000

Records the maximum lag value (500 in the example above) from among all Federated repositories in milliseconds.

Number of Mirrors Exceeding the Sync Threshold Value

Example:

jfrt_federation_num_mirrors_exceeding_lag_threshold_total 17 1575374698000

Records the total number of mirrors (17 in the example above) that have a sync lag larger than the default threshold. If no mirrors have a log above the threshold, the recorded value will be 0.

Number of Federated Repositories Exceeding the Sync Threshold Value

Example:

jfrt_federation_num_repos_exceeding_lag_threshold_total 9 1575374698000

Records the total number of distinct Federated repositories (9 in the example above) that have a sync lag larger than the default threshold. This value will always be equal to or less than the Number of Mirrors Exceeding the Sync Threshold value. If no repositories have a log above the threshold, the recorded value will be 0.

Number of Disabled Federated Members

Example:

jfrt_federation_num_members_disabled_total 2 1575374698000

Records the number of disabled mirrors (2 in the example above), including disabled Federated repositories from the JPD in context as well as disabled remote Federated repositories that are part of any existing Federation from the JPD in context.

Number of Federated Repositories per Status

Examples:

jfrt_federation_num_repos_status_total{status="healthy"} 232 1575374691025 
jfrt_federation_num_repos_status_total{status="out_of_sync"} 22 1575374691025 
jfrt_federation_num_repos_status_total{status="error_exhausted"} 13 1575374691025 
jfrt_federation_num_repos_status_total{status="pending_fullsync"} 41 1575374691025

Records the number of Federated repositories that have the indicated status. Possible statuses include: healthy, pending full sync, full sync running, out of sync, exhausted, disabled.

Federated Repository Metrics in MBeans

An MBean section for Federated repositories is available whose attributes are identical to the metrics specified in Federated Repository Metrics. The attributes include:

  • MaximumLagInMs

  • NumberOfDisabledFederationMembers

  • NumberOfReposExceedingLagThreshold

    This metric requires the use of the Get Federation Mirror Lag Time API to limit the results to those repositories that exceed a defined threshold.

  • NumberOfMirrorsExceedingLagThreshold

Monitor Federated Repositories in the Platform UI

Monitoring Federated repositories in the platform UI is dependent on whether you are using the standalone Artifactory Federation Service (introduced for Cloud environments in Q3 2024 and for Self-hosted environments in Q1 2025) or the legacy Federation service that existed earlier.

Monitoring with the Artifactory Federation Service

When using the Artifactory Federation Service, see Monitor Federated Repositories using the Dashboard.

Monitoring with Legacy Federation

When using the legacy Federation service, see the following topics:

View Federated Repository Status

From Artifactory version 7.58.0, administrators can view the current status of a Federated repository, including the number of pending events, the mirror latency, and the synchronization status among the mirrors for this repository.

To view the status of a Federated repository:

  1. Go to the Administration module and select Repositories.

  2. Use the Repositories filter to show federated repositories.

  3. Click the actions menu for the relevant Federated repository and select Federation Status.

    Federation_Status.png

The top of the Federated Repository Status window displays the following information about the selected JPD:

Federated-Repo-Status_window_top.png

Item

Description

Replicated Artifacts

Fully: The total number of artifacts that have been fully replicated (metadata & binary) on this JPD.

Metadata only: The total number of artifacts for which metadata exists on this JPD but not the binary.

Binaries Tasks

In Progress: The number of replication tasks that are currently in progress. If this value is significantly less than the Metadata Only value, this indicates a high failure rate that should be investigated.

Failed: The total number of replication tasks that have failed to complete.

The table in the Federated Repository Status window displays the following information about each target mirror that is Federated with the selected repository:

Federated-Repo-Status_window_table.png

Item

Description

Queue Events

The total number of events waiting to be sent to the target mirror.

Error Events

The number of failed events during the synchronization process.

Mirror Latency

The total wait time for the next pending event that needs to be handled. The calculation is:

Current time – Time of the next event that has yet to be handled

Sync Status

Indicates whether the Federated repository is synchronized with the target mirror. (The threshold is a certain number of error events that is defined at the system level and cannot be modified.)

View Queued Event Details for the Selected Target Mirror

Select a row in the Federated Repository Status table to display additional details about the queue events for the selected target mirror.

Queued_Events_cropped.png
ItemDescription
CreateThe number of Create events waiting to be sent to the target mirror.
UpdateThe number of Update events waiting to be sent to the target mirror.
DeleteThe number of Delete events waiting to be sent to the target mirror.
PropertiesThe number of node properties waiting to be sent to the target mirror.

View Federation Sync Status

From Artifactory version 7.55.1, administrators can see whether there are significant synchronization delays between the Federated repositories on the local JPD and other Federation members on remote JPDs.

To view the Federation synchronization status, go to the Administration module and select Monitoring > Federation Status.

Screenshot_2025-11-27_at_6_03_56_AM.png

The table contains the following information about each JPD:

ColumnDescription
PriorityAllows setting the synchronization priority for the federated repository.
Repository KeyThe unique identifier (key) of the federated repository.
MembersThe number of JFrog Platform Deployments (JPDs) that are members of this repository federation.
StatusThe synchronization status of the repository (e.g., in sync, delayed, in error, or disabled).

Refresh the Federated Sync Status

In the Federation Sync Status window, click Refresh to update the information in the table.

View the List of Longest Delays in a JPD

In the Federation Sync Status table, click the row of a JPD to view a popup window containing a list of repositories (up to 10) with the longest delays.

Fed-Sync-Status_top10-delays.png

The table contains the following information:

ColumnDescription
SourceThe Federated repository on the source JPD.
TargetThe Federated repository on the target JPD.
DelayThe length of the delay between the source to the target.

Multi-Version Support

Artifactory includes multi-version support, which enables the members of a Federation to run different versions of Artifactory, even if the version at one site includes configuration features and values that are not supported on the versions running at other sites. Thanks to multi-version support, future upgrades after 7.49.6 can be performed on one site at a time, eliminating the need for simultaneous upgrades across all locations.

📘

Note

It is a prerequisite of the multi-version support feature to upgrade all Artifactory instances hosting Federated repository members to Artifactory 7.49.6. After this has been done, multi-version support is enabled for all versions going forward.

Whenever an instance with a new Artifactory version is introduced to the Federation, any configuration differences that are detected between the new version and older versions are reported to the user. For example, if there are new features not found in the older version, a message such as the following is displayed:

Multi-version_config-conflict1.png

In the example shown above, the user can respond by either disabling the two new fields in the Federation member running the new Artifactory version, or by removing the member from the Federation.

If an existing feature has been enhanced with a new value that is not available in older versions, a message such as the following is displayed:

Multi-version_config-conflict2.png

In such cases, the user can respond by selecting a value that the older versions support.

When creating repositories using the API, the process works in a more automated fashion to prevent other automated processes (such as disaster recovery) from breaking due to the Federation member that was upgraded.

If there are new features that older versions do not support, the new feature is disabled. For upgraded features, a default value is chosen that is supported on all member versions.