impl

package
v0.0.0-...-2701d8d Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Aug 17, 2024 License: MIT Imports: 71 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type FullNodeAPI

func (*FullNodeAPI) CreateBackup

func (n *FullNodeAPI) CreateBackup(ctx context.Context, fpath string) error

func (*FullNodeAPI) NodeStatus

func (n *FullNodeAPI) NodeStatus(ctx context.Context, inclChainStatus bool) (status api.NodeStatus, err error)

func (*FullNodeAPI) RaftLeader

func (n *FullNodeAPI) RaftLeader(ctx context.Context) (peer.ID, error)

func (*FullNodeAPI) RaftState

func (n *FullNodeAPI) RaftState(ctx context.Context) (*api.RaftStateData, error)

type StorageMinerAPI

type StorageMinerAPI struct {
	fx.In

	api.Common
	api.Net

	EnabledSubsystems api.MinerSubsystems

	Full        api.FullNode
	LocalStore  *paths.Local
	RemoteStore *paths.Remote

	// Markets
	PieceStore        dtypes.ProviderPieceStore         `optional:"true"`
	StorageProvider   storagemarket.StorageProvider     `optional:"true"`
	RetrievalProvider retrievalmarket.RetrievalProvider `optional:"true"`
	SectorAccessor    retrievalmarket.SectorAccessor    `optional:"true"`
	DataTransfer      dtypes.ProviderDataTransfer       `optional:"true"`
	StagingGraphsync  dtypes.StagingGraphsync           `optional:"true"`
	Transport         dtypes.ProviderTransport          `optional:"true"`
	DealPublisher     *storageadapter.DealPublisher     `optional:"true"`
	SectorBlocks      *sectorblocks.SectorBlocks        `optional:"true"`
	Host              host.Host                         `optional:"true"`
	DAGStore          *dagstore.DAGStore                `optional:"true"`
	DAGStoreWrapper   *mktsdagstore.Wrapper             `optional:"true"`

	// Miner / storage
	Miner       *sealing.Sealing     `optional:"true"`
	BlockMiner  *miner.Miner         `optional:"true"`
	StorageMgr  *sealer.Manager      `optional:"true"`
	IStorageMgr sealer.SectorManager `optional:"true"`
	paths.SectorIndex
	storiface.WorkerReturn `optional:"true"`
	AddrSel                *ctladdr.AddressSelector

	WdPoSt *wdpost.WindowPoStScheduler `optional:"true"`

	Epp gen.WinningPoStProver `optional:"true"`
	DS  dtypes.MetadataDS

	// StorageService is populated when we're not the main storage node (e.g. we're a markets node)
	StorageService modules.MinerStorageService `optional:"true"`

	ConsiderOnlineStorageDealsConfigFunc        dtypes.ConsiderOnlineStorageDealsConfigFunc        `optional:"true"`
	SetConsiderOnlineStorageDealsConfigFunc     dtypes.SetConsiderOnlineStorageDealsConfigFunc     `optional:"true"`
	ConsiderOnlineRetrievalDealsConfigFunc      dtypes.ConsiderOnlineRetrievalDealsConfigFunc      `optional:"true"`
	SetConsiderOnlineRetrievalDealsConfigFunc   dtypes.SetConsiderOnlineRetrievalDealsConfigFunc   `optional:"true"`
	StorageDealPieceCidBlocklistConfigFunc      dtypes.StorageDealPieceCidBlocklistConfigFunc      `optional:"true"`
	SetStorageDealPieceCidBlocklistConfigFunc   dtypes.SetStorageDealPieceCidBlocklistConfigFunc   `optional:"true"`
	ConsiderOfflineStorageDealsConfigFunc       dtypes.ConsiderOfflineStorageDealsConfigFunc       `optional:"true"`
	SetConsiderOfflineStorageDealsConfigFunc    dtypes.SetConsiderOfflineStorageDealsConfigFunc    `optional:"true"`
	ConsiderOfflineRetrievalDealsConfigFunc     dtypes.ConsiderOfflineRetrievalDealsConfigFunc     `optional:"true"`
	SetConsiderOfflineRetrievalDealsConfigFunc  dtypes.SetConsiderOfflineRetrievalDealsConfigFunc  `optional:"true"`
	ConsiderVerifiedStorageDealsConfigFunc      dtypes.ConsiderVerifiedStorageDealsConfigFunc      `optional:"true"`
	SetConsiderVerifiedStorageDealsConfigFunc   dtypes.SetConsiderVerifiedStorageDealsConfigFunc   `optional:"true"`
	ConsiderUnverifiedStorageDealsConfigFunc    dtypes.ConsiderUnverifiedStorageDealsConfigFunc    `optional:"true"`
	SetConsiderUnverifiedStorageDealsConfigFunc dtypes.SetConsiderUnverifiedStorageDealsConfigFunc `optional:"true"`
	SetSealingConfigFunc                        dtypes.SetSealingConfigFunc                        `optional:"true"`
	GetSealingConfigFunc                        dtypes.GetSealingConfigFunc                        `optional:"true"`
	GetExpectedSealDurationFunc                 dtypes.GetExpectedSealDurationFunc                 `optional:"true"`
	SetExpectedSealDurationFunc                 dtypes.SetExpectedSealDurationFunc                 `optional:"true"`

	HarmonyDB *harmonydb.DB `optional:"true"`
}

func (*StorageMinerAPI) ActorAddress

func (sm *StorageMinerAPI) ActorAddress(context.Context) (address.Address, error)

func (*StorageMinerAPI) ActorAddressConfig

func (sm *StorageMinerAPI) ActorAddressConfig(ctx context.Context) (api.AddressConfig, error)

func (*StorageMinerAPI) ActorSectorSize

func (sm *StorageMinerAPI) ActorSectorSize(ctx context.Context, addr address.Address) (abi.SectorSize, error)

func (*StorageMinerAPI) ActorWithdrawBalance

func (sm *StorageMinerAPI) ActorWithdrawBalance(ctx context.Context, amount abi.TokenAmount) (cid.Cid, error)

func (*StorageMinerAPI) BeneficiaryWithdrawBalance

func (sm *StorageMinerAPI) BeneficiaryWithdrawBalance(ctx context.Context, amount abi.TokenAmount) (cid.Cid, error)

func (*StorageMinerAPI) CheckProvable

func (sm *StorageMinerAPI) CheckProvable(ctx context.Context, pp abi.RegisteredPoStProof, sectors []storiface.SectorRef) (map[abi.SectorNumber]string, error)

func (*StorageMinerAPI) ComputeDataCid

func (sm *StorageMinerAPI) ComputeDataCid(ctx context.Context, pieceSize abi.UnpaddedPieceSize, pieceData storiface.Data) (abi.PieceInfo, error)

func (*StorageMinerAPI) ComputeProof

func (*StorageMinerAPI) ComputeWindowPoSt

func (sm *StorageMinerAPI) ComputeWindowPoSt(ctx context.Context, dlIdx uint64, tsk types.TipSetKey) ([]lminer.SubmitWindowedPoStParams, error)

func (*StorageMinerAPI) CreateBackup

func (sm *StorageMinerAPI) CreateBackup(ctx context.Context, fpath string) error

func (*StorageMinerAPI) DagstoreGC

func (sm *StorageMinerAPI) DagstoreGC(ctx context.Context) ([]api.DagstoreShardResult, error)

func (*StorageMinerAPI) DagstoreInitializeAll

func (sm *StorageMinerAPI) DagstoreInitializeAll(ctx context.Context, params api.DagstoreInitializeAllParams) (<-chan api.DagstoreInitializeAllEvent, error)

func (*StorageMinerAPI) DagstoreInitializeShard

func (sm *StorageMinerAPI) DagstoreInitializeShard(ctx context.Context, key string) error

func (*StorageMinerAPI) DagstoreListShards

func (sm *StorageMinerAPI) DagstoreListShards(ctx context.Context) ([]api.DagstoreShardInfo, error)

func (*StorageMinerAPI) DagstoreLookupPieces

func (sm *StorageMinerAPI) DagstoreLookupPieces(ctx context.Context, cid cid.Cid) ([]api.DagstoreShardInfo, error)

func (*StorageMinerAPI) DagstoreRecoverShard

func (sm *StorageMinerAPI) DagstoreRecoverShard(ctx context.Context, key string) error

func (*StorageMinerAPI) DagstoreRegisterShard

func (sm *StorageMinerAPI) DagstoreRegisterShard(ctx context.Context, key string) error

func (*StorageMinerAPI) DealsConsiderOfflineRetrievalDeals

func (sm *StorageMinerAPI) DealsConsiderOfflineRetrievalDeals(ctx context.Context) (bool, error)

func (*StorageMinerAPI) DealsConsiderOfflineStorageDeals

func (sm *StorageMinerAPI) DealsConsiderOfflineStorageDeals(ctx context.Context) (bool, error)

func (*StorageMinerAPI) DealsConsiderOnlineRetrievalDeals

func (sm *StorageMinerAPI) DealsConsiderOnlineRetrievalDeals(ctx context.Context) (bool, error)

func (*StorageMinerAPI) DealsConsiderOnlineStorageDeals

func (sm *StorageMinerAPI) DealsConsiderOnlineStorageDeals(ctx context.Context) (bool, error)

func (*StorageMinerAPI) DealsConsiderUnverifiedStorageDeals

func (sm *StorageMinerAPI) DealsConsiderUnverifiedStorageDeals(ctx context.Context) (bool, error)

func (*StorageMinerAPI) DealsConsiderVerifiedStorageDeals

func (sm *StorageMinerAPI) DealsConsiderVerifiedStorageDeals(ctx context.Context) (bool, error)

func (*StorageMinerAPI) DealsGetExpectedSealDurationFunc

func (sm *StorageMinerAPI) DealsGetExpectedSealDurationFunc(ctx context.Context) (time.Duration, error)

func (*StorageMinerAPI) DealsImportData

func (sm *StorageMinerAPI) DealsImportData(ctx context.Context, deal cid.Cid, fname string) error

func (*StorageMinerAPI) DealsList

func (sm *StorageMinerAPI) DealsList(ctx context.Context) ([]*api.MarketDeal, error)

func (*StorageMinerAPI) DealsPieceCidBlocklist

func (sm *StorageMinerAPI) DealsPieceCidBlocklist(ctx context.Context) ([]cid.Cid, error)

func (*StorageMinerAPI) DealsSetConsiderOfflineRetrievalDeals

func (sm *StorageMinerAPI) DealsSetConsiderOfflineRetrievalDeals(ctx context.Context, b bool) error

func (*StorageMinerAPI) DealsSetConsiderOfflineStorageDeals

func (sm *StorageMinerAPI) DealsSetConsiderOfflineStorageDeals(ctx context.Context, b bool) error

func (*StorageMinerAPI) DealsSetConsiderOnlineRetrievalDeals

func (sm *StorageMinerAPI) DealsSetConsiderOnlineRetrievalDeals(ctx context.Context, b bool) error

func (*StorageMinerAPI) DealsSetConsiderOnlineStorageDeals

func (sm *StorageMinerAPI) DealsSetConsiderOnlineStorageDeals(ctx context.Context, b bool) error

func (*StorageMinerAPI) DealsSetConsiderUnverifiedStorageDeals

func (sm *StorageMinerAPI) DealsSetConsiderUnverifiedStorageDeals(ctx context.Context, b bool) error

func (*StorageMinerAPI) DealsSetConsiderVerifiedStorageDeals

func (sm *StorageMinerAPI) DealsSetConsiderVerifiedStorageDeals(ctx context.Context, b bool) error

func (*StorageMinerAPI) DealsSetExpectedSealDurationFunc

func (sm *StorageMinerAPI) DealsSetExpectedSealDurationFunc(ctx context.Context, d time.Duration) error

func (*StorageMinerAPI) DealsSetPieceCidBlocklist

func (sm *StorageMinerAPI) DealsSetPieceCidBlocklist(ctx context.Context, cids []cid.Cid) error

func (*StorageMinerAPI) Discover

func (*StorageMinerAPI) IndexerAnnounceAllDeals

func (sm *StorageMinerAPI) IndexerAnnounceAllDeals(ctx context.Context) error

func (*StorageMinerAPI) IndexerAnnounceDeal

func (sm *StorageMinerAPI) IndexerAnnounceDeal(ctx context.Context, proposalCid cid.Cid) error

func (*StorageMinerAPI) MarketCancelDataTransfer

func (sm *StorageMinerAPI) MarketCancelDataTransfer(ctx context.Context, transferID datatransfer.TransferID, otherPeer peer.ID, isInitiator bool) error

func (*StorageMinerAPI) MarketDataTransferDiagnostics

func (sm *StorageMinerAPI) MarketDataTransferDiagnostics(ctx context.Context, mpid peer.ID) (*api.TransferDiagnostics, error)

func (*StorageMinerAPI) MarketDataTransferUpdates

func (sm *StorageMinerAPI) MarketDataTransferUpdates(ctx context.Context) (<-chan api.DataTransferChannel, error)

func (*StorageMinerAPI) MarketGetAsk

func (*StorageMinerAPI) MarketGetDealUpdates

func (sm *StorageMinerAPI) MarketGetDealUpdates(ctx context.Context) (<-chan storagemarket.MinerDeal, error)

func (*StorageMinerAPI) MarketGetRetrievalAsk

func (sm *StorageMinerAPI) MarketGetRetrievalAsk(ctx context.Context) (*retrievalmarket.Ask, error)

func (*StorageMinerAPI) MarketImportDealData

func (sm *StorageMinerAPI) MarketImportDealData(ctx context.Context, propCid cid.Cid, path string) error

func (*StorageMinerAPI) MarketListDataTransfers

func (sm *StorageMinerAPI) MarketListDataTransfers(ctx context.Context) ([]api.DataTransferChannel, error)

func (*StorageMinerAPI) MarketListDeals

func (sm *StorageMinerAPI) MarketListDeals(ctx context.Context) ([]*api.MarketDeal, error)

func (*StorageMinerAPI) MarketListIncompleteDeals

func (sm *StorageMinerAPI) MarketListIncompleteDeals(ctx context.Context) ([]storagemarket.MinerDeal, error)

func (*StorageMinerAPI) MarketListRetrievalDeals

func (sm *StorageMinerAPI) MarketListRetrievalDeals(ctx context.Context) ([]struct{}, error)

func (*StorageMinerAPI) MarketPendingDeals

func (sm *StorageMinerAPI) MarketPendingDeals(ctx context.Context) (api.PendingDealInfo, error)

func (*StorageMinerAPI) MarketPublishPendingDeals

func (sm *StorageMinerAPI) MarketPublishPendingDeals(ctx context.Context) error

func (*StorageMinerAPI) MarketRestartDataTransfer

func (sm *StorageMinerAPI) MarketRestartDataTransfer(ctx context.Context, transferID datatransfer.TransferID, otherPeer peer.ID, isInitiator bool) error

func (*StorageMinerAPI) MarketRetryPublishDeal

func (sm *StorageMinerAPI) MarketRetryPublishDeal(ctx context.Context, propcid cid.Cid) error

func (*StorageMinerAPI) MarketSetAsk

func (sm *StorageMinerAPI) MarketSetAsk(ctx context.Context, price types.BigInt, verifiedPrice types.BigInt, duration abi.ChainEpoch, minPieceSize abi.PaddedPieceSize, maxPieceSize abi.PaddedPieceSize) error

func (*StorageMinerAPI) MarketSetRetrievalAsk

func (sm *StorageMinerAPI) MarketSetRetrievalAsk(ctx context.Context, rask *retrievalmarket.Ask) error

func (*StorageMinerAPI) MiningBase

func (sm *StorageMinerAPI) MiningBase(ctx context.Context) (*types.TipSet, error)

func (*StorageMinerAPI) PiecesGetCIDInfo

func (sm *StorageMinerAPI) PiecesGetCIDInfo(ctx context.Context, payloadCid cid.Cid) (*piecestore.CIDInfo, error)

func (*StorageMinerAPI) PiecesGetPieceInfo

func (sm *StorageMinerAPI) PiecesGetPieceInfo(ctx context.Context, pieceCid cid.Cid) (*piecestore.PieceInfo, error)

func (*StorageMinerAPI) PiecesListCidInfos

func (sm *StorageMinerAPI) PiecesListCidInfos(ctx context.Context) ([]cid.Cid, error)

func (*StorageMinerAPI) PiecesListPieces

func (sm *StorageMinerAPI) PiecesListPieces(ctx context.Context) ([]cid.Cid, error)

func (*StorageMinerAPI) PledgeSector

func (sm *StorageMinerAPI) PledgeSector(ctx context.Context) (abi.SectorID, error)

func (*StorageMinerAPI) RecoverFault

func (sm *StorageMinerAPI) RecoverFault(ctx context.Context, sectors []abi.SectorNumber) ([]cid.Cid, error)

func (*StorageMinerAPI) RuntimeSubsystems

func (sm *StorageMinerAPI) RuntimeSubsystems(context.Context) (res api.MinerSubsystems, err error)

func (*StorageMinerAPI) SealingAbort

func (sm *StorageMinerAPI) SealingAbort(ctx context.Context, call storiface.CallID) error

func (*StorageMinerAPI) SealingRemoveRequest

func (sm *StorageMinerAPI) SealingRemoveRequest(ctx context.Context, schedId uuid.UUID) error

func (*StorageMinerAPI) SealingSchedDiag

func (sm *StorageMinerAPI) SealingSchedDiag(ctx context.Context, doSched bool) (interface{}, error)

func (*StorageMinerAPI) SectorAbortUpgrade

func (sm *StorageMinerAPI) SectorAbortUpgrade(ctx context.Context, number abi.SectorNumber) error

func (*StorageMinerAPI) SectorAddPieceToAny

func (*StorageMinerAPI) SectorCommitFlush

func (sm *StorageMinerAPI) SectorCommitFlush(ctx context.Context) ([]sealiface.CommitBatchRes, error)

func (*StorageMinerAPI) SectorCommitPending

func (sm *StorageMinerAPI) SectorCommitPending(ctx context.Context) ([]abi.SectorID, error)

func (*StorageMinerAPI) SectorGetExpectedSealDuration

func (sm *StorageMinerAPI) SectorGetExpectedSealDuration(ctx context.Context) (time.Duration, error)

func (*StorageMinerAPI) SectorGetSealDelay

func (sm *StorageMinerAPI) SectorGetSealDelay(ctx context.Context) (time.Duration, error)

func (*StorageMinerAPI) SectorMarkForUpgrade

func (sm *StorageMinerAPI) SectorMarkForUpgrade(ctx context.Context, id abi.SectorNumber, snap bool) error

func (*StorageMinerAPI) SectorMatchPendingPiecesToOpenSectors

func (sm *StorageMinerAPI) SectorMatchPendingPiecesToOpenSectors(ctx context.Context) error

func (*StorageMinerAPI) SectorNumAssignerMeta

func (sm *StorageMinerAPI) SectorNumAssignerMeta(ctx context.Context) (api.NumAssignerMeta, error)

func (*StorageMinerAPI) SectorNumFree

func (sm *StorageMinerAPI) SectorNumFree(ctx context.Context, name string) error

func (*StorageMinerAPI) SectorNumReservations

func (sm *StorageMinerAPI) SectorNumReservations(ctx context.Context) (map[string]bitfield.BitField, error)

func (*StorageMinerAPI) SectorNumReserve

func (sm *StorageMinerAPI) SectorNumReserve(ctx context.Context, name string, field bitfield.BitField, force bool) error

func (*StorageMinerAPI) SectorNumReserveCount

func (sm *StorageMinerAPI) SectorNumReserveCount(ctx context.Context, name string, count uint64) (bitfield.BitField, error)

func (*StorageMinerAPI) SectorPreCommitFlush

func (sm *StorageMinerAPI) SectorPreCommitFlush(ctx context.Context) ([]sealiface.PreCommitBatchRes, error)

func (*StorageMinerAPI) SectorPreCommitPending

func (sm *StorageMinerAPI) SectorPreCommitPending(ctx context.Context) ([]abi.SectorID, error)

func (*StorageMinerAPI) SectorReceive

func (sm *StorageMinerAPI) SectorReceive(ctx context.Context, meta api.RemoteSectorMeta) error

func (*StorageMinerAPI) SectorRemove

func (sm *StorageMinerAPI) SectorRemove(ctx context.Context, id abi.SectorNumber) error

func (*StorageMinerAPI) SectorSetExpectedSealDuration

func (sm *StorageMinerAPI) SectorSetExpectedSealDuration(ctx context.Context, delay time.Duration) error

func (*StorageMinerAPI) SectorSetSealDelay

func (sm *StorageMinerAPI) SectorSetSealDelay(ctx context.Context, delay time.Duration) error

func (*StorageMinerAPI) SectorStartSealing

func (sm *StorageMinerAPI) SectorStartSealing(ctx context.Context, number abi.SectorNumber) error

func (*StorageMinerAPI) SectorTerminate

func (sm *StorageMinerAPI) SectorTerminate(ctx context.Context, id abi.SectorNumber) error

func (*StorageMinerAPI) SectorTerminateFlush

func (sm *StorageMinerAPI) SectorTerminateFlush(ctx context.Context) (*cid.Cid, error)

func (*StorageMinerAPI) SectorTerminatePending

func (sm *StorageMinerAPI) SectorTerminatePending(ctx context.Context) ([]abi.SectorID, error)

func (*StorageMinerAPI) SectorUnseal

func (sm *StorageMinerAPI) SectorUnseal(ctx context.Context, sectorNum abi.SectorNumber) error

func (*StorageMinerAPI) SectorsList

func (sm *StorageMinerAPI) SectorsList(context.Context) ([]abi.SectorNumber, error)

List all staged sectors

func (*StorageMinerAPI) SectorsListInStates

func (sm *StorageMinerAPI) SectorsListInStates(ctx context.Context, states []api.SectorState) ([]abi.SectorNumber, error)

func (*StorageMinerAPI) SectorsRefs

func (sm *StorageMinerAPI) SectorsRefs(ctx context.Context) (map[string][]api.SealedRef, error)

func (*StorageMinerAPI) SectorsStatus

func (sm *StorageMinerAPI) SectorsStatus(ctx context.Context, sid abi.SectorNumber, showOnChainInfo bool) (api.SectorInfo, error)

func (*StorageMinerAPI) SectorsSummary

func (sm *StorageMinerAPI) SectorsSummary(ctx context.Context) (map[api.SectorState]int, error)

Use SectorsSummary from stats (prometheus) for faster result

func (*StorageMinerAPI) SectorsUnsealPiece

func (sm *StorageMinerAPI) SectorsUnsealPiece(ctx context.Context, sector storiface.SectorRef, offset storiface.UnpaddedByteIndex, size abi.UnpaddedPieceSize, randomness abi.SealRandomness, commd *cid.Cid) error

func (*StorageMinerAPI) SectorsUpdate

func (sm *StorageMinerAPI) SectorsUpdate(ctx context.Context, id abi.SectorNumber, state api.SectorState) error

func (*StorageMinerAPI) ServeRemote

func (sm *StorageMinerAPI) ServeRemote(perm bool) func(w http.ResponseWriter, r *http.Request)

func (*StorageMinerAPI) StorageAddLocal

func (sm *StorageMinerAPI) StorageAddLocal(ctx context.Context, path string) error

func (*StorageMinerAPI) StorageAuthVerify

func (sm *StorageMinerAPI) StorageAuthVerify(ctx context.Context, token string) ([]auth.Permission, error)

func (*StorageMinerAPI) StorageDetachLocal

func (sm *StorageMinerAPI) StorageDetachLocal(ctx context.Context, path string) error

func (*StorageMinerAPI) StorageLocal

func (sm *StorageMinerAPI) StorageLocal(ctx context.Context) (map[storiface.ID]string, error)

func (*StorageMinerAPI) StorageRedeclareLocal

func (sm *StorageMinerAPI) StorageRedeclareLocal(ctx context.Context, id *storiface.ID, dropMissing bool) error

func (*StorageMinerAPI) StorageStat

func (sm *StorageMinerAPI) StorageStat(ctx context.Context, id storiface.ID) (fsutil.FsStat, error)

func (*StorageMinerAPI) WorkerConnect

func (sm *StorageMinerAPI) WorkerConnect(ctx context.Context, url string) error

func (*StorageMinerAPI) WorkerJobs

func (sm *StorageMinerAPI) WorkerJobs(ctx context.Context) (map[uuid.UUID][]storiface.WorkerJob, error)

func (*StorageMinerAPI) WorkerStats

func (sm *StorageMinerAPI) WorkerStats(ctx context.Context) (map[uuid.UUID]storiface.WorkerStats, error)

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL