Documentation ¶
Overview ¶
Package imgrpkg implements the server side Inode Management for ProxyFS volumes. While the package provides a small set of Go-callable APIs, the bulk of its functionality is accessed via package retryrpc-exposed RPCs. While these RPCs reference active volumes known to an imgrpkg instance, a RESTful API is provided to specify those active volumes.
Note that func's listed under type RetryRPCServerStruct are the RPCs issued by the client side via package retryrpc connections (and, thus, not intended to be called directly).
To configure an imgrpkg instance, Start() is called passing, as the sole argument, a package conf ConfMap. Here is a sample .conf file:
[IMGR] PublicIPAddr: imgr PrivateIPAddr: imgr RetryRPCPort: 32356 HTTPServerPort: 15346 CheckPointIPAddrs: # List of ickpt cluster instance IPAddr's CheckPointPort: 33123 # Only required if CheckPointIPAddrs is non-empty CheckPointCACertFilePath: # Defaults to /dev/null disabling TLS CheckPointRetryDelay: 100ms # Only required if CheckPointIPAddrs is non-empty CheckPointRetryExpBackoff: 2 # Only required if CheckPointIPAddrs is non-empty CheckPointRetryLimit: 4 # Only required if CheckPointIPAddrs is non-empty CheckPointTimeout: 10m # Only required if CheckPointIPAddrs is non-empty CheckPointConnectionPoolSize: 10 # Only required if CheckPointIPAddrs is non-empty RetryRPCTTLCompleted: 10m RetryRPCAckTrim: 100ms RetryRPCDeadlineIO: 60s RetryRPCKeepAlivePeriod: 60s RetryRPCCertFilePath: # If both RetryRPC{Cert|Key}FilePath are missing or empty, RetryRPCKeyFilePath: # non-TLS RetryRPC will be selected; otherwise TLS will be used CheckPointInterval: 10s AuthTokenCheckInterval: 1m FetchNonceRangeToReturn: 100 MountLimit: 10000 OpenFileLimit: 100000 MinLeaseDuration: 250ms LeaseInterruptInterval: 250ms LeaseInterruptLimit: 20 LeaseEvictLowLimit: 100000 LeaseEvictHighLimit: 100010 SwiftRetryDelay: 100ms SwiftRetryExpBackoff: 2 SwiftRetryLimit: 4 SwiftTimeout: 10m SwiftConnectionPoolSize: 128 ParallelObjectDeletePerVolumeLimit: 100 InodeTableCacheEvictLowLimit: 10000 InodeTableCacheEvictHighLimit: 10010 InodeTableMaxInodesPerBPlusTreePage: 2048 RootDirMaxDirEntriesPerBPlusTreePage: 1024 LogFilePath: # imgr.log LogToConsole: true # false TraceEnabled: false RetryRPCLogEnabled: false
Most of the config keys are required and must have values. One exception is LogFilePath that will default to "" and, hence, cause logging to not go to a file. This might typically be used when LogToConsole is set to true.
The RetryRPC{Cert|Key}FilePath keys are optional and, if provided may be empty. In such cases, the retryrpc package will be configured to use TCP. If, however, they are present and provide a path or paths to valid Cert|Key files, the retryrpc package will be configured to use TLS. In any event, the RPCs will be available via <PublicIPAddr>:<RetryRPCPort>.
The RESTful API is provided by an embedded HTTP Server (at URL http://<PrivateIPAddr>:<HTTPServerPort>) responds to the following:
DELETE /keepalive
This will disable the keep alive mechanism.
DELETE /volume/<volumeName>
This will cause the specified <volumeName> to no longer be served. Note that this does not actually affect the contents of the associated Container.
GET /config
This will return a JSON document that matches the conf.ConfMap used to launch this package.
GET /keepalive
This will return the configured keepalive duration if any. If the keepalive mechanism has not been enabled, a 404 Not Found will be returned. If the keepalive mechanism has been enabled, this is the highest performing way to reset the countdown timer.
GET /stats
This will return a raw bucketstats dump.
GET /version
This will return the imgr version.
GET /volume
This will return a JSON document containing an array of volumes currently being served with details about each.
GET /volume/<volumeName>
This will return a JSON document containing only the specified <volumeName> details (assuming it is currently being served).
POST /volume Content-Type: application/json { "StorageURL": "http://172.28.128.2:8080/v1/AUTH_test/con", "AuthToken" : "AUTH_tk0123456789abcde0123456789abcdef0" }
This will cause the specified StorageURL to be formatted. The StorageURL specified in the JSON document content identifies the Container for format. The AuthToken in the JSON document content provides the authentication to use during the formatting process.
PUT /keepalive/<duration>
This will configure the keep alive mechanism to start a count down timer for the specified duration after which all served volumes will no longer be served. The expiration of this count down timer can be avoided by GET-ing (/keepalive) the current duration, PUT-ing (/keepalive/<duration) a fresh keep alive duration, GET-ing (/volume) the list of volumes currently served, PUT-ing (/volume/<volumeName>) a new volume, or by DELETE-ing (/keepalive) the keep alive mechanism. Note that if tje keep alive mechanism ever expired, the current duratiom will be reset to zero (i.e. no expiration).
PUT /volume/<volumeName> Content-Type: application/json { "StorageURL": "http://172.28.128.2:8080/v1/AUTH_test/con" }
This will cause the specified <volumeName> to be served. The StorageURL specified in the JSON document content identifies the Container to serve. Clients will each supply an AuthToken in their Mount/RenewMount requests that will be used to access the Container.
PUT /volume/<volumeName> Content-Type: application/json { "StorageURL": "http://172.28.128.2:8080/v1/AUTH_test/con", "AuthToken" : "AUTH_tk0123456789abcde0123456789abcdef0" }
This will cause the specified <volumeName> to be served. The StorageURL specified in the JSON document content identifies the Container to serve. Clients will each supply an AuthToken in their Mount/RenewMount requests that will be used to access the Container. As a debugging aid, and in the case where no Clients have <volumeName> mounted, the AuthToken in the JSON document content will be used to access the Container.
Index ¶
- Constants
- func LogInfof(format string, args ...interface{})
- func LogWarnf(format string, args ...interface{})
- func Signal() (err error)
- func Start(confMap conf.ConfMap) (err error)
- func Stop() (err error)
- type AdjustInodeTableEntryOpenCountRequestStruct
- type AdjustInodeTableEntryOpenCountResponseStruct
- type DeleteInodeTableEntryRequestStruct
- type DeleteInodeTableEntryResponseStruct
- type FetchNonceRangeRequestStruct
- type FetchNonceRangeResponseStruct
- type FlushRequestStruct
- type FlushResponseStruct
- type GetInodeTableEntryRequestStruct
- type GetInodeTableEntryResponseStruct
- type LeaseRequestStruct
- type LeaseRequestType
- type LeaseResponseStruct
- type LeaseResponseType
- type MountRequestStruct
- type MountResponseStruct
- type PutInodeTableEntriesRequestStruct
- type PutInodeTableEntriesResponseStruct
- type PutInodeTableEntryStruct
- type RPCInterrupt
- type RPCInterruptType
- type RenewMountRequestStruct
- type RenewMountResponseStruct
- type RetryRPCServerStruct
- func (dummy *RetryRPCServerStruct) AdjustInodeTableEntryOpenCount(...) (err error)
- func (dummy *RetryRPCServerStruct) DeleteInodeTableEntry(deleteInodeTableEntryRequest *DeleteInodeTableEntryRequestStruct, ...) (err error)
- func (dummy *RetryRPCServerStruct) FetchNonceRange(fetchNonceRangeRequest *FetchNonceRangeRequestStruct, ...) (err error)
- func (dummy *RetryRPCServerStruct) Flush(flushRequest *FlushRequestStruct, flushResponse *FlushResponseStruct) (err error)
- func (dummy *RetryRPCServerStruct) GetInodeTableEntry(getInodeTableEntryRequest *GetInodeTableEntryRequestStruct, ...) (err error)
- func (dummy *RetryRPCServerStruct) Lease(leaseRequest *LeaseRequestStruct, leaseResponse *LeaseResponseStruct) (err error)
- func (dummy *RetryRPCServerStruct) Mount(retryRPCClientID uint64, mountRequest *MountRequestStruct, ...) (err error)
- func (dummy *RetryRPCServerStruct) PutInodeTableEntries(putInodeTableEntriesRequest *PutInodeTableEntriesRequestStruct, ...) (err error)
- func (dummy *RetryRPCServerStruct) RenewMount(renewMountRequest *RenewMountRequestStruct, ...) (err error)
- func (dummy *RetryRPCServerStruct) Unmount(unmountRequest *UnmountRequestStruct, unmountResponse *UnmountResponseStruct) (err error)
- func (dummy *RetryRPCServerStruct) VolumeStatus(volumeStatusRequest *VolumeStatusRequestStruct, ...) (err error)
- type UnmountRequestStruct
- type UnmountResponseStruct
- type VolumeStatusRequestStruct
- type VolumeStatusResponseStruct
Constants ¶
const ( EAuthTokenRejected = "EAuthTokenRejected:" EBadOpenCountAdjustment = "EBadOpenCountAdjustment:" ELeaseRequestDenied = "ELeaseRequestDenied:" EMissingLease = "EMissingLease:" ETooManyMounts = "ETooManyMounts" ETooManyOpens = "ETooManyOpens" EVolumeBeingDeleted = "EVolumeBeingDeleted:" EUnknownInodeNumber = "EUnknownInodeNumber:" EUnknownMountID = "EUnknownMountID:" EUnknownVolumeName = "EUnknownVolumeName:" )
E* specifies the prefix of an error string returned by any RetryRPC API
Variables ¶
This section is empty.
Functions ¶
func LogInfof ¶
func LogInfof(format string, args ...interface{})
LogInfof is a wrapper around the internal logInfof() func called by imgr/main.go::main().
func LogWarnf ¶
func LogWarnf(format string, args ...interface{})
LogWarnf is a wrapper around the internal logWarnf() func called by imgr/main.go::main().
Types ¶
type AdjustInodeTableEntryOpenCountRequestStruct ¶
type AdjustInodeTableEntryOpenCountRequestStruct struct { MountID string InodeNumber uint64 Adjustment int64 }
AdjustInodeTableEntryOpenCountRequestStruct is the request object for AdjustInodeTableEntryOpenCount.
type AdjustInodeTableEntryOpenCountResponseStruct ¶
type AdjustInodeTableEntryOpenCountResponseStruct struct{}
AdjustInodeTableEntryOpenCountResponseStruct is the response object for AdjustInodeTableEntryOpenCount.
type DeleteInodeTableEntryRequestStruct ¶
DeleteInodeTableEntryRequestStruct is the request object for DeleteInodeTableEntry.
type DeleteInodeTableEntryResponseStruct ¶
type DeleteInodeTableEntryResponseStruct struct{}
DeleteInodeTableEntryResponseStruct is the response object for DeleteInodeTableEntry.
type FetchNonceRangeRequestStruct ¶
type FetchNonceRangeRequestStruct struct {
MountID string
}
FetchNonceRangeRequestStruct is the request object for FetchNonceRange.
Possible errors: EAuthTokenRejected EUnknownMountID
type FetchNonceRangeResponseStruct ¶
FetchNonceRangeResponseStruct is the response object for FetchNonceRange.
type FlushRequestStruct ¶
type FlushRequestStruct struct {
MountID string
}
FlushRequestStruct is the request object for Flush.
type FlushResponseStruct ¶
type FlushResponseStruct struct{}
FlushResponseStruct is the response object for Flush.
type GetInodeTableEntryRequestStruct ¶
GetInodeTableEntryRequestStruct is the request object for GetInodeTableEntry.
type GetInodeTableEntryResponseStruct ¶
type GetInodeTableEntryResponseStruct struct { InodeHeadObjectNumber uint64 InodeHeadLength uint64 }
GetInodeTableEntryResponseStruct is the response object for GetInodeTableEntry.
type LeaseRequestStruct ¶
type LeaseRequestStruct struct { MountID string InodeNumber uint64 LeaseRequestType // One of LeaseRequestType* }
LeaseRequestStruct is the request object for Lease.
func (*LeaseRequestStruct) String ¶
func (leaseRequest *LeaseRequestStruct) String() (str string)
type LeaseRequestType ¶
type LeaseRequestType uint32
LeaseRequestType specifies the requested lease operation.
const ( LeaseRequestTypePromote // Currently SharedLease held, requesting promoting to ExclusiveLease LeaseRequestTypeExclusive // Currently unleased, requesting ExclusiveLease LeaseRequestTypeDemote // Currently ExclusiveLease held, requesting demotion to SharedLease LeaseRequestTypeRelease // Currently SharedLease or ExclusiveLease held, releasing it )
type LeaseResponseStruct ¶
type LeaseResponseStruct struct {
LeaseResponseType // One of LeaseResponseType*
}
LeaseResponseStruct is the response object for Lease.
func (*LeaseResponseStruct) String ¶
func (leaseResponse *LeaseResponseStruct) String() (str string)
type LeaseResponseType ¶
type LeaseResponseType uint32
LeaseResponseType specifies the acknowledgement that the requested lease operation has been completed or denied (e.g. when a Promotion request cannot be satisfied and the client will soon be receiving a LeaseInterruptTypeRelease).
const ( LeaseResponseTypeDenied LeaseResponseType = iota // Request denied (e.g. Promotion deadlock avoidance) LeaseResponseTypePromoted // SharedLease promoted to ExclusiveLease LeaseResponseTypeExclusive // ExclusiveLease granted LeaseResponseTypeDemoted // ExclusiveLease demoted to SharedLease LeaseResponseTypeReleased // SharedLease or ExclusiveLease released )
type MountRequestStruct ¶
MountRequestStruct is the request object for Mount.
type MountResponseStruct ¶
type MountResponseStruct struct {
MountID string
}
MountResponseStruct is the response object for Mount.
type PutInodeTableEntriesRequestStruct ¶
type PutInodeTableEntriesRequestStruct struct { MountID string UpdatedInodeTableEntryArray []PutInodeTableEntryStruct SuperBlockInodeObjectCountAdjustment int64 SuperBlockInodeBytesWrittenAdjustment int64 SuperBlockInodeBytesReferencedAdjustment int64 DereferencedObjectNumberArray []uint64 }
PutInodeTableEntriesRequestStruct is the request object for PutInodeTableEntries (which must have an active Exclusive Lease for every PutInodeTableEntryStruct.InodeNumber granted to the MountID).
The SuperBlockInode{ObjectCount|BytesWritten|BytesReferenced}Adjustment fields are used to update the corresponding fields in the volume's SuperBlock.
Note that dereferenced objects listed in the DereferencedObjectNumberArray will not be deleted until the next CheckPoint is performed.
type PutInodeTableEntriesResponseStruct ¶
type PutInodeTableEntriesResponseStruct struct{}
PutInodeTableEntriesResponseStruct is the response object for PutInodeTableEntries.
type PutInodeTableEntryStruct ¶
type PutInodeTableEntryStruct struct { InodeNumber uint64 InodeHeadObjectNumber uint64 InodeHeadLength uint64 }
PutInodeTableEntryStruct is used to indicate the change to an individual InodeTableEntry as part of the collection of changes in a PutInodeTablesEntries request (which must have an active Exclusive Lease granted to the MountID).
type RPCInterrupt ¶
type RPCInterrupt struct { RPCInterruptType // One of RPCInterruptType* InodeNumber uint64 // if RPCInterruptType == RPCInterruptTypeUnmount, InodeNumber == 0 (ignored) }
RPCInterrupt is the "upcall" mechanism used by ProxyFS to interrupt the client.
func (*RPCInterrupt) String ¶
func (rpcInterrupt *RPCInterrupt) String() (str string)
type RPCInterruptType ¶
type RPCInterruptType uint32
RPCInterruptType specifies the action (unmount, demotion, or release) requested by ProxyFS of the client in an RPCInterrupt "upcall" to indicate that a lease or leases must be demoted or released.
const ( // RPCInterruptTypeUnmount indicates all Leases should be released (after performing necessary // state saving RPCs) and the client should unmount. // RPCInterruptTypeUnmount RPCInterruptType = iota // RPCInterruptTypeDemote indicates the specified LeaseHandle should (at least) be demoted // from Exclusive to Shared (after performing necessary state saving RPCs). // RPCInterruptTypeDemote // RPCInterruptTypeRelease indicates the specified LeaseHandle should be released (after // performing state saving RPCs and invalidating such cached state). // RPCInterruptTypeRelease )
type RenewMountRequestStruct ¶
RenewMountRequestStruct is the request object for RenewMount.
type RenewMountResponseStruct ¶
type RenewMountResponseStruct struct{}
RenewMountResponseStruct is the response object for RenewMount.
type RetryRPCServerStruct ¶
type RetryRPCServerStruct struct{}
func (*RetryRPCServerStruct) AdjustInodeTableEntryOpenCount ¶
func (dummy *RetryRPCServerStruct) AdjustInodeTableEntryOpenCount(adjustInodeTableEntryOpenCountRequest *AdjustInodeTableEntryOpenCountRequestStruct, adjustInodeTableEntryOpenCountResponse *AdjustInodeTableEntryOpenCountResponseStruct) (err error)
AdjustInodeTableEntryOpenCount requests the specified Inode's OpenCount be adjusted. If the referenced InodeNumber is non-zero, a (Shared or Exclusive) Lease must be granted to the MountID. If the adjustment results in an OpenCount of zero and the Inode has been marked for deletion by a prior call to DeleteInodeTableEntry, the Inode will be deleted.
Possible errors: EAuthTokenRejected EBadOpenCountAdjustment EMissingLease EUnknownMountID
func (*RetryRPCServerStruct) DeleteInodeTableEntry ¶
func (dummy *RetryRPCServerStruct) DeleteInodeTableEntry(deleteInodeTableEntryRequest *DeleteInodeTableEntryRequestStruct, deleteInodeTableEntryResponse *DeleteInodeTableEntryResponseStruct) (err error)
DeleteInodeTableEntry requests the specified Inode information be deleted. An active Exclusive Lease must be granted to the MountID. Note that unless/until the OpenCount for the Inode drops to zero, the Inode will still exist.
Possible errors: EAuthTokenRejected EMissingLease EUnknownMountID
func (*RetryRPCServerStruct) FetchNonceRange ¶
func (dummy *RetryRPCServerStruct) FetchNonceRange(fetchNonceRangeRequest *FetchNonceRangeRequestStruct, fetchNonceRangeResponse *FetchNonceRangeResponseStruct) (err error)
FetchNonceRange requests a range of uint64 nonce values (i.e. values that will never be reused).
Possible errors: EAuthTokenRejected EUnknownMountID
func (*RetryRPCServerStruct) Flush ¶
func (dummy *RetryRPCServerStruct) Flush(flushRequest *FlushRequestStruct, flushResponse *FlushResponseStruct) (err error)
Flush that the results of prior PutInodeTableEntries requests be persisted.
Possible errors: EAuthTokenRejected EUnknownMountID
func (*RetryRPCServerStruct) GetInodeTableEntry ¶
func (dummy *RetryRPCServerStruct) GetInodeTableEntry(getInodeTableEntryRequest *GetInodeTableEntryRequestStruct, getInodeTableEntryResponse *GetInodeTableEntryResponseStruct) (err error)
GetInodeTableEntry requests the Inode information for the specified Inode (which must have an active Shared or Exclusive Lease granted to the MountID).
Possible errors: EAuthTokenRejected EMissingLease EUnknownInodeNumber EUnknownMountID
func (*RetryRPCServerStruct) Lease ¶
func (dummy *RetryRPCServerStruct) Lease(leaseRequest *LeaseRequestStruct, leaseResponse *LeaseResponseStruct) (err error)
Lease is a blocking Lease Request.
Possible errors: EAuthTokenRejected EUnknownMountID
func (*RetryRPCServerStruct) Mount ¶
func (dummy *RetryRPCServerStruct) Mount(retryRPCClientID uint64, mountRequest *MountRequestStruct, mountResponse *MountResponseStruct) (err error)
Mount performs a mount of the specified Volume and returns a MountID to be used in all subsequent RPCs to reference this Volume by this Client.
Possible errors: EAuthTokenRejected EVolumeBeingDeleted EUnknownVolumeName
func (*RetryRPCServerStruct) PutInodeTableEntries ¶
func (dummy *RetryRPCServerStruct) PutInodeTableEntries(putInodeTableEntriesRequest *PutInodeTableEntriesRequestStruct, putInodeTableEntriesResponse *PutInodeTableEntriesResponseStruct) (err error)
PutInodeTableEntries requests an atomic update of the listed Inodes (which must each have an active Exclusive Lease granted to the MountID).
Possible errors: EAuthTokenRejected EMissingLease EUnknownMountID
func (*RetryRPCServerStruct) RenewMount ¶
func (dummy *RetryRPCServerStruct) RenewMount(renewMountRequest *RenewMountRequestStruct, renewMountResponse *RenewMountResponseStruct) (err error)
RenewMount updates the AuthToken for the specified MountID.
Possible errors: EAuthTokenRejected EUnknownMountID
func (*RetryRPCServerStruct) Unmount ¶
func (dummy *RetryRPCServerStruct) Unmount(unmountRequest *UnmountRequestStruct, unmountResponse *UnmountResponseStruct) (err error)
Unmount requests that the given MountID be released (and implicitly releases any Leases held by the MountID).
Possible errors: EAuthTokenRejected EUnknownMountID
func (*RetryRPCServerStruct) VolumeStatus ¶
func (dummy *RetryRPCServerStruct) VolumeStatus(volumeStatusRequest *VolumeStatusRequestStruct, volumeStatusResponse *VolumeStatusResponseStruct) (err error)
VolumeStatus requests the current status of the mounted volume.
Possible errors: EAuthTokenRejected EUnknownMountID
type UnmountRequestStruct ¶
type UnmountRequestStruct struct {
MountID string
}
UnmountRequestStruct is the request object for Unmount.
type UnmountResponseStruct ¶
type UnmountResponseStruct struct{}
UnmountResponseStruct is the response object for Unmount.
type VolumeStatusRequestStruct ¶
type VolumeStatusRequestStruct struct {
MountID string
}
VolumeStatusRequestStruct is the request object for VolumeStatus.