CloudFoundry 上传app, console一直处于uploading 问题解决

本文记录了一次使用Cloud Foundry v145版本上传应用时遇到的问题:上传进程始终停留在uploading状态。通过分析CloudController源码及日志,发现问题是由于队列名称配置不一致导致的任务未能执行。最终通过修改配置文件中的队列名称解决了问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

       今天使用CF(v145) 上传app,进行测试,发现一直无法上传成功,总是处于uploading 状态,查看后台日志,发现一直在调用接口:

             10.106.1.46, 10.106.1.34 - - [07/May/2014 17:06:00] "GET /v2/jobs/3278adea-acbd-4bb0-8301-89ec6d69961f HTTP/1.1" 200 230 0.0088

  查询这个job是否完成,根据现象这个job好像一直处于未完成状态,查看CF 中的CloudController 源码:

    def upload(guid)
      
      app = find_guid_and_validate_access(:update, guid)

      logger.error "app=#{app}  resourcee=#{params["resources"]}"
      raise Errors::AppBitsUploadInvalid, "missing :resources" unless params["resources"]

      uploaded_zip_of_files_not_in_blobstore_path = CloudController::DependencyLocator.instance.upload_handler.uploaded_file(params, "application")
      
      logger.error "uploaded_zip_of_files_not_in_blobstore_path=#{uploaded_zip_of_files_not_in_blobstore_path}"
      app_bits_packer_job = AppBitsPackerJob.new(guid, uploaded_zip_of_files_not_in_blobstore_path, json_param("resources"))

      if params["async"] == "true"
        logger.error "async is true"
        job = Delayed::Job.enqueue(app_bits_packer_job, queue: LocalQueue.new(config))
        [HTTP::CREATED, JobPresenter.new(job).to_json]
      else
        logger.error "async is false"
        app_bits_packer_job.perform
        [HTTP::CREATED, "{}"]
      end
    rescue VCAP::CloudController::Errors::AppBitsUploadInvalid, VCAP::CloudController::Errors::AppPackageInvalid
      app.mark_as_failed_to_stage
      raise
    end


      控制台 push app 时,是采用的异步,传入了参数async=true,将生成package的job 放入了Delayed::Job 队列。在AppBitsPackerJob 中增加了日志,发现,该任务就没有被执行。

    查看启动cloud_controller_jobs 的脚本

 

case $1 in

  start)
    pid_guard $PIDFILE "Cloud controller jobs"

    mkdir -p $RUN_DIR
    mkdir -p $LOG_DIR

    chown vcap:vcap $RUN_DIR
    chown vcap:vcap $LOG_DIR

    echo $$ > $PIDFILE
    chown vcap:vcap $PIDFILE

    cd $CC_PACKAGE_DIR/cloud_controller_ng
    export QUEUES=cc-micro_ng-0,$GENERIC_QUEUE
    exec chpst -u vcap:vcap bundle exec rake jobs:work \
      >>$LOG_DIR/jobs_work.stdout.log 2>>$LOG_DIR/jobs_work.stderr.log
  ;;

 

红色部分是应该是队列名称,想起之前修改过CloudController的index。修改为了1.

 

bulk_api:
  auth_user: bulk_api
  auth_password: "c1oudc0w"

nginx:
  use_nginx: false
  instance_socket: "/var/vcap/sys/run/cloud_controller_ng/cloud_controller.sock"

index: 1
name: micro_ng

info:
  name: vcap
  build: "2222"
  version: 2
  support_address: http://support.cloudfoundry.com
  description: Cloud Foundry sponsored by Pivotal
  api_version: 2.0.0



查看cc数据库,数据表delay_jobs 每个delayed job 的queue 标记,猜测是由于 队列名称不一致导致的。

 

修改后,恢复正常。

 

CloudFoundry 将这个index 参数放在配置文件,不知道是要做什么用。。。。

 

 

       

 

 

    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值