ARTIFACTORY: Why Artifacts Might Not Be Cached in an Artifactory Smart Remote Repository

ARTIFACTORY: Why Artifacts Might Not Be Cached in an Artifactory Smart Remote Repository

Products
Frog_Artifactory
Content Type
User_Guide
AuthorFullName__c
Travis Ly
articleNumber
000006386
ft:sourceType
Salesforce
FirstPublishedDate
2025-03-18T11:57:48Z
lastModifiedDate
2025-03-17
VersionNumber
2
Disclaimer on Edge Nodes
Please note that the information below does not apply to Artifactory Edge nodes. Artifacts are only cached on an Edge node after they are pulled through the Edge. Edge nodes do not support preemptive caching or pull replication.


Introduction
In Artifactory, a Smart Remote Repository extends the capabilities of a standard remote repository by allowing more advanced replication and caching features. Despite these advantages, administrators may occasionally encounter unexpected behavior—such as artifacts failing to populate the remote-cache repository. This article highlights the most common reasons why artifacts might not be cached and provides a step-by-step approach to resolving them. Whether you are new to Artifactory or an experienced DevOps engineer, the insights offered here will help you keep your repositories running smoothly, ensure efficient replication, and ultimately streamline your artifact management process.


Common Issues and Resolutions

Issue #1: Incorrect Repository URL Configuration

When configuring a Smart Remote Repository, some package types require the repository URL to be prefixed with the appropriate api/<package_type> path. If this prefix is missing or incorrect, artifacts will not be cached.
Example (On-Premises):
http://<JFrog_URL>/artifactory/api/<package_type>/<repository_key>
Example (Cloud):
https://<servername>.jfrog.io/artifactory/api/<package_type>/<repository_key>
The prefix is required for these package types:

Package Type

Prefix

Ansible

api/ansible

Bower

api/bower

Cargo

api/cargo

Chef

api/puppet

CocoaPods

api/pods

Composer

api/composer

Conan

api/conan

Conda

api/conda

Cran

api/cran

Docker

api/docker

Gems

api/gems

GitLFS

api/gitlfs

Go

api/go

Helm OCI

api/oci

HuggingFace

api/huggingfaceml

NuGet

api/nuget

Npm

api/npm

OCI

api/oci

Puppet

api/puppet

PyPI

See “PyPI Settings” below

Swift

api/swift

VCS

api/vcs

For PyPI repositories, the registry URL also differs depending on whether the target is a local or remote repository on the remote Artifactory instance:

Local PyPI Example:
- URL: http://<JFrog_URL>/artifactory/pypi-local/
- Registry URL: http://<JFrog_URL>/artifactory/api/pypi/pypi-local/

Remote PyPI Example:
- URL: http://<JFrog_URL>/artifactory/pypi-remote/
- Registry URL: http://<JFrog_URL>/artifactory/api/pypi/pypi-remote/

For more details, see Configure a Smart Remote Repository.


Issue #2: Artifacts Not Downloaded, Therefore Not Cached

Even if the Smart Remote Repository is configured correctly, you may notice that the remote -cache repository remains empty. Artifacts in Artifactory are only cached once they have been requested (i.e., downloaded). If no download occurs, the -cache repository stays empty and you may see a message like, “This item is not cached.”

User-added image 

Resolving Empty Cache for a Smart Remote Repository
Enabling active replication on a Smart Remote Repository allows Artifactory to proactively populate a remote cache through pull replication, instead of waiting for artifacts to be fetched on demand. This approach is particularly useful if network latency makes on-demand retrieval too slow for your needs.

Artifactory supports two methods for pull replication:
-Scheduled Pull
The remote repository invokes pull replication on a defined schedule, running asynchronously at regular intervals to synchronize local, remote, or virtual repositories.

-Event-Based Pull (Requires Enterprise License)
Pull replication occurs in near real-time. Any artifact creation, copy, move, or deletion immediately triggers replication to the target, making new or updated files available without waiting for the next scheduled run.
This flexibility ensures that even in high-latency or mission-critical environments, artifacts are readily available in the remote cache as soon as they are introduced in the source repository. For more information, see our pull replication documentation.

 1. Enable Active Replication (Enterprise License Required)
- In the Replications tab of the Smart Remote Repository, check the option Enable Active Replication of This Repository.
- If Enable Event Replication is turned on, Artifactory will replicate artifacts immediately after specific events (upload, delete, property change), rather than waiting for the CRON-based schedule.

 2. Set a Cron Expression
Artifactory uses Quartz-style CRON expressions, which typically include 6 or 7 fields. For example, to run replication every Friday at 8:00 AM:
0 0 8 ? * FRI
- If you see an “Invalid cron expression” error while using a classic 5-field format (e.g., 0 8 * * 5), update it to the correct Quartz format (e.g., 0 0 8 ? * FRI).

Manually Trigger Replication for Existing Artifacts
If there are already artifacts in the remote repository that you need to cache, run the replication job manually or wait for the next scheduled replication. Replication must occur at least once to populate the -cache repository with existing artifacts.

User-added image 
User-added image 


Conclusion

 1. Repository URL Prefix: Always ensure you include api/<package_type> for package types that require it.
 2. Caching Requires Downloads: Artifacts will not appear in the -cache repository unless they’ve been requested or replicated.
 3. Replication Settings: Configure Enable Active Replication, set a valid CRON schedule, and consider Event Replication (if licensed) to ensure timely caching.
 4. Existing Artifacts: If artifacts are already in the repository, run or wait for replication to cache them.

For additional resources and a step-by-step guide, refer to:
JFrog Documentation: Smart Remote Repositories
Cron Trigger Tutorial (Quartz)