func getImageRetry(clientName, imageName string, timeoutTime time.Time) (*image.Image, error) { imageSrpcClient, err := srpc.DialHTTP("tcp", clientName, 0) if err != nil { return nil, err } defer imageSrpcClient.Close() for ; time.Now().Before(timeoutTime); time.Sleep(time.Second) { img, err := imgclient.GetImage(imageSrpcClient, imageName) if err != nil { return nil, err } else if img != nil { if err := img.FileSystem.RebuildInodePointers(); err != nil { return nil, err } img.FileSystem.InodeToFilenamesTable() img.FileSystem.FilenameToInodeTable() img.FileSystem.HashToInodesTable() img.FileSystem.ComputeTotalDataBytes() img.FileSystem.BuildEntryMap() return img, nil } } return nil, errors.New("timed out getting image") }
func getImage(client *srpc.Client, name string) (*image.Image, error) { img, err := imgclient.GetImage(client, name) if err != nil { return nil, err } if img == nil { return nil, errors.New(name + ": not found") } img.FileSystem.RebuildInodePointers() return img, nil }
func (m *Manager) loadImage(imageClient *srpc.Client, name string) ( *srpc.Client, *image.Image, error) { if imageClient == nil { var err error imageClient, err = srpc.DialHTTP("tcp", m.imageServerAddress, 0) if err != nil { if !m.loggedDialFailure { m.logger.Printf("Error dialing: %s: %s\n", m.imageServerAddress, err) m.loggedDialFailure = true } return nil, nil, err } } img, err := client.GetImage(imageClient, name) if err != nil { m.logger.Printf("Error calling: %s\n", err) imageClient.Close() return nil, nil, err } if img == nil || m.scheduleExpiration(img, name) { return imageClient, nil, nil } if err := img.FileSystem.RebuildInodePointers(); err != nil { m.logger.Printf("Error building inode pointers for image: %s %s", name, err) return imageClient, nil, err } // Build cache data now to avoid potential concurrent builds later. img.FileSystem.InodeToFilenamesTable() img.FileSystem.FilenameToInodeTable() img.FileSystem.HashToInodesTable() img.FileSystem.ComputeTotalDataBytes() img.FileSystem.BuildEntryMap() m.logger.Printf("Got image: %s\n", name) return imageClient, img, nil }